oracle语句转成mysql语句_MySQL的SQL语句 数据定义语句(6) ALTER TABLE 语句(1)

ALTER TABLE 语句 e2f806bf2c43a1d2efc56e606d903c4b.png 62ccd4f33203a8c867a469d00b601105.png e231dce54f2a31cf4c41a8866af68bb1.png ff32fc59b7f366dfeed703b0d4e4c503.png 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语句有其中一个子句。例如,要在一个语句中删除多个列,请执行以下操作: 8c5ac09994b4f0ca030726aa1e19e800.png ● 如果存储引擎不支持要进行的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: c397e9e57ce65d60dd7fff1403e2fdef.png ■ 指定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表更改为使用压缩行存储格式: 2ca29cda155da87916cfd1191d5498f4.png ● 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子句的表。 ● 重置当前自动增量值: f72ff1a61d7f810e89810a0d93730be2.png 不能将计数器重置为小于或等于当前使用的值。对于InnoDB和MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前最大AUTO_INCREMENT列值加1。 ● 更改默认表字符集: 9c28539805f72f183e9a227a9ba6dded.png ● 添加(或更改)表注释: 6f0939dabed641cbe1e507c30e0a8936.png ● 使用带有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语句中的方式相同,如下例所示: aaaf7cc7572832b432c1f28c2a4dca27.png 请记住,ALTER TABLE ... COMMENT ...放弃表的任何现有注释。 ● ENGINE_ATTRIBUTE和SECONDARY_ENGINE_ATTRIBUTE选项(从MySQL 8.0.21开始提供)用于指定主存储引擎和辅助存储引擎的表、列和索引属性。这些选项保留供将来使用。不能更改索引属性。必须删除一个索引并将其添加回所需的更改,这可以在单个ALTER TABLE语句中执行。 若要验证表选项是否按预期更改,请使用SHOW CREATE TABLE或查询INFORMATION_SCHEMA.TABLES表。 官方文档地址: https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值