ALTER TABLE 语句

ALTER TABLE更改表的结构。例如,可以添加或删除列、创建或销毁索引、更改现有列的类型、重命名列或表本身。还可以更改表特性,例如用于表或表注释的存储引擎。

●要使用ALTER TABLE,需要表的ALTER、CREATE和INSERT权限。重命名表需要对旧表执行ALTER和DROP操作,对新表执行ALTER、CREATE和INSERT操作。

●在表名之后,指定要进行的更改。如果没有给定值,ALTER TABLE将不执行任何操作。

●许多允许更改的语法与CREATE TABLE语句的子句类似。column_definition 子句对ADD和CHANGE使用与CREATE TABLE相同的语法。

●COLUMN是可选的,可以省略,但RENAME COLUMN除外(用于区分列重命名操作和表重命名操作)。

●一个ALTER TABLE语句中允许有多个ADD、ALTER、DROP和CHANGE子句,用逗号分隔。这是一个MySQL对标准SQL的扩展,标准SQL只允许每个ALTER TABLE语句有其中一个子句。例如,要在一个语句中删除多个列,请执行以下操作:

● 如果存储引擎不支持要进行的ALTER TABLE操作,则会出现警告。可以用SHOW WARNINGS语句来显示这些警告。

● MySQL 8.0.17及更高版本的InnoDB支持使用key_part规范在JSON列上添加多值索引,可以采用(CAST json_path AS type ARRAY)这个形式。

● 使用mysql_info() C API函数,可以查出ALTER TABLE复制了多少行。

本节还对ALTER TABLE语句的以下主题中进行了描述:

Table 选项

table_options 指定了类似于可以在CREATE TABLE语句中使用的表选项,例如ENGINE、AUTO_INCREMENT、AVG_ROW_LENGTH、MAX_ROWS、ROW_FORMAT或TABLESPACE。

但是,ALTER TABLE在作为表选项给出时会忽略DATA DIRECTORY 和 INDEX DIRECTORY。ALTER TABLE只允许它们作为分区选项,并且要求具有FILE权限。

在ALTER TABLE中使用表选项可以方便地更改单个表的特性。例如:

● 如果t1当前不是InnoDB表,则此语句将其存储引擎更改为InnoDB:

■ 指定ENGINE子句时,ALTER TABLE将重建该表。即使表已经具有指定的存储引擎,也是如此。

■ 对现有的INNODB表运行ALTER TABLE tbl_name ENGINE=INNODB 语句会产生一个 "null" ALTER TABLE操作,该操作可用于对INNODB表进行碎片整理。对InnoDB表执行ALTER TABLE tbl_name FORCE,会产生同样的作用。

■ ALTER TABLE tbl_name ENGINE=INNODB和ALTER TABLE tbl_name FORCE使用联机DDL。

■ 更改表的存储引擎的结果受所需存储引擎是否可用以及NO_ENGINE_SUBSTITUTION SQL模式的设置的影响。

■ 为了防止意外的数据丢失,ALTER TABLE不能将表的存储引擎更改为MERGE或BLACKHOLE。

● 将InnoDB表更改为使用压缩行存储格式:

● ENCRYPTION子句为InnoDB表启用或禁用页级数据加密。必须安装和配置keyring插件才能启用加密。

如果启用table_encryption_privilege_check变量,则需要TABLE_ENCRYPTION_ADMIN权限才能使用ENCRYPTION子句设置与默认模式不同的加密设置。

在MySQL8.0.16之前,只有在改变驻留在独立表空间(file-per-table tablespaces)中的表时,才支持ENCRYPTION子句。从MySQL8.0.16开始,对于驻留在常规表空间中的表也支持ENCRYPTION子句。

对于驻留在常规表空间中的表,表和表空间加密必须匹配。

在没有显式指定ENCRYPTION子句的情况下,不允许通过将表移动到其他表空间或更改存储引擎来更改表加密。

从MySQL 8.0.16开始,如果表使用不支持加密的存储引擎,则不允许使用'N'或''以外的值指定ENCRYPTION子句。此前,该子句是接受的。也不允许使用不支持加密的存储引擎在启用加密的模式中创建没有ENCRYPTION子句的表。

● 重置当前自动增量值:

不能将计数器重置为小于或等于当前使用的值。对于InnoDB和MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前最大AUTO_INCREMENT列值加1。

● 更改默认表字符集:

● 添加(或更改)表注释:

● 使用带有TABLESPACE选项的ALTER TABLE语句在现有的常规表空间、独立表空间和系统表空间之间移动InnoDB表。

■ ALTER TABLE ... TABLESPACE操作总是会导致完整的表重建,即使TABLESPACE属性没有改变以前的值。

■ ALTER TABLE ... TABLESPACE语法不支持将表从临时表空间移动到持久表空间。

■ CREATE TABLE ... TABLESPACE支持DATA DIRECTORY子句,ALTER TABLE ... TABLESPACE不支持,如果指定,则忽略。

● MySQL NDB Cluster 8.0支持设置NDB_TABLE选项,用于控制表的分区平衡、从任何副本读取、完全主从复制,或这些控制的任意组合,这个设置是ALTER TABLE语句的表注释的一部分,其方式与CREATE TABLE语句中的方式相同,如下例所示:

请记住,ALTER TABLE ... COMMENT ...放弃表的任何现有注释。

● ENGINE_ATTRIBUTE和SECONDARY_ENGINE_ATTRIBUTE选项(从MySQL 8.0.21开始提供)用于指定主存储引擎和辅助存储引擎的表、列和索引属性。这些选项保留供将来使用。不能更改索引属性。必须删除一个索引并将其添加回所需的更改,这可以在单个ALTER TABLE语句中执行。

若要验证表选项是否按预期更改,请使用SHOW CREATE TABLE或查询INFORMATION_SCHEMA.TABLES表。

mysql更改数据语句6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句(1)相关推荐

  1. mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...

    添加和删除列 使用ADD向表中添加新列,使用DROP删除现有列.DROP col_name是对标准SQL的MySQL扩展. 若要在表行的特定位置添加列,请使用FIRST col_name 或者 AFT ...

  2. MySQL中定义fk语句_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (4)

    外键和其他约束 InnoDB和NDB存储引擎支持 FOREIGN KEY 和 REFERENCES 子句,这些存储引擎实现了ADD [CONSTRAINT [symbol]] FOREIGN KEY ...

  3. MySQL修改数据表(ALTER TABLE语句)

    为实现数据库中表规范化设计的目的,有时候需要对之前已经创建的表进行结构修改或者调整. 在 MySQL 中可以使用 ALTER TABLE 语句来改变原有表的结构,例如增加或删减列.创建或取消索引.更改 ...

  4. 《MySQL技术》学习笔记——使用SQL管理数据

    MySQL技术内幕--使用SQL管理数据 使用SQL管理数据 服务器的SQL模式 MySQL的标识符语法和命名规则 SQL语句的大小写规则 字符集支持 指定字符集 确定可用字符集和当前设置 Unico ...

  5. SQL ALTER TABLE 语句

    SQL ALTER TABLE 语句 ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.删除或修改列. SQL ALTER TABLE 语法 如需在表中添加列,请使用下面 ...

  6. SQL ALTER TABLE 语句在项目中的使用

    1.在实际的项目开发过程中,之前已经创建好的实体类可能需要增加/删除字段,亦或是更改已有字段的属性,比如主键的增长策略从自增型改为UUID型,那么就会涉及到 SQL 中 alter table 语句的 ...

  7. mysql的altertable_【编程词典】mysql ALTER TABLE语句

    alter 英 [ˈɔ:ltə(r)]   美 [ˈɔltɚ] vt.改变;更改;改建(房屋);(人)变老 vi.改变;修改 第三人称单数: alters 现在分词: altering 过去式: al ...

  8. ALTER TABLE 语句与 FOREIGN KEY 约束“FK_Booking_Hotel“冲突。

    错误:SQL Server 创建数据库表的外键时出错 ALTER TABLE 语句与 FOREIGN KEY 约束"FK_Booking_Hotel"冲突.该冲突发生于数据库&qu ...

  9. 【数据库】ALTER TABLE 语句与 CHECK 约束““冲突。该冲突发生于数据库““,表““, column ‘‘

    摘要:微信搜索[三桥君] 本篇讲述的是在已经创建好表且有数据的情况下,增加CHECK约束的报错问题 一.问题 当我给数据库中已经创建好的Student表,增加约束条件. --增加student表的约束 ...

最新文章

  1. {} 与 function() { } , 选用空对象{}来存放keyValue
  2. gin自定义HTTP配置
  3. java comp env 区别_加和不加java:comp/env/前缀有什么区别?
  4. 一些语法在游戏开发中的应用
  5. PolarDB-X 2.0:使用一个透明的分布式数据库是一种什么体验?
  6. linux更改python版本链接
  7. python开发工具管理系统_Python开发桌面软件文档及网址管理工具,强迫症的福音...
  8. Mybatis判断int类型是否为空
  9. [python教程入门学习]使用Python六步制作小鸟管道游戏(附源码)
  10. linux服务器分区方案
  11. Android API 实验记录 (二)
  12. mp4 文件中的h264 avc1格式介绍
  13. t分布(Student t distribution)——正态分布的小样本抽样分布
  14. axure 折线图部件_在Axure中怎么做柱状图、折线图啊?
  15. 怎样快速查询单号物流信息,筛选出未签收的单号
  16. 随笔-你买罐头干什么
  17. 女友闹别扭不用担心,这个撩妹黑科技轻松哄好
  18. STM32F429 13. SPI 通讯(code)
  19. Rails 中的 RJS 模板
  20. mysql学习计划_MySQL学习计划

热门文章

  1. OpenCV中图像垂直拼接函数vconcat的使用
  2. MYSQL 加密函数的用法
  3. java高级-多线程编程
  4. SSM前后端分离及跨域
  5. GLSL三种修饰符区别与用途(uniform,attribute和varying)
  6. 专门用来显示大量数据的视图:AdapterView(1)
  7. [公告] TechNet / MSDN 经理人博客上周移机整合暂断
  8. 一个asp.net2005的页面文件调用CSS样式的BUG
  9. app_offline.htm 是确有其事
  10. C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程