mysql添加数据语句6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (6)

ALTER TABLE 和生成的列

允许对生成的列执行的ALTER TABLE操作包括ADD、MODIFY和CHANGE。

●可以添加生成的列。

9e6db8cbf7b46d868a43a1480b1cc406.png

●可以修改生成列的数据类型和表达式

52defa599cf8394ae16416848d4a5c45.png

●生成列如果没有被其他列引用,那么可以重命名或者删除

e8f4ea2d49a7b21d26999ceb4c50c892.png

●虚拟生成列不能更改为存储的生成列,反之亦然。要解决此问题,请删除列,然后使用新定义添加它。

520ad22ab55dc522f972d6685f20d51e.png

●可以将非生成列更改为存储列,但不能更改为虚拟生成的列。

29f0aa8a8b9a42dee29f53c68b38b1ac.png

●存储但不是虚拟生成的列可以更改为非生成列。存储的生成值将成为非生成列的值。

72b9983f23a4b2f78c17c5f1ac68ad39.png

●ADD COLUMN不是存储列的就地操作(在不使用临时表的情况下完成),因为表达式必须由服务器计算。对于存储的列,索引更改将就地完成,而表达式更改不会就地完成。对列注释的更改将就地完成。

●对于非分区表,ADD COLUMN和DROP COLUMN针对虚拟列是就地操作。但是,添加或删除虚拟列不能与其他ALTER TABLE操作一起就地执行。

对于分区表,ADD COLUMN和DROP COLUMN针对虚拟列不是就地操作。

●InnoDB支持虚拟生成列的二级索引。在虚拟生成的列上添加或删除二级索引是一个就地操作。

●将虚拟生成的列添加到表或修改时,不能确保生成的列表达式计算的数据不会超出该列的范围。这可能导致返回不一致的数据和意外失败的语句。为了控制是否对这些列进行验证,ALTER TABLE支持WITHOUT VALIDATION 和 WITH VALIDATION子句:

■ 使用WITHOUT VALIDATION(如果两个子句都没有指定,则为默认值),将执行就地操作(如果可能),不检查数据完整性,并且语句完成得更快。但是,如果值超出范围,以后从表中读取的内容可能会报告该列的警告或错误。

■ 使用WITH VALIDATION,ALTER TABLE复制表。如果发生超出范围或任何其他错误,则语句将失败。因为执行表复制,所以语句需要更长的时间。

只有ADD COLUMN、CHANGE COLUMN和MODIFY COLUMN操作才允许使用WITHOUT VALIDATION 和 WITH VALIDATION。否则,将发生ER_WRONG_USAGE错误。

●如果表达式求值导致截断或向函数提供不正确的输入,ALTER TABLE语句将以错误终止,DDL操作将被拒绝。

●更改列col_name的默认值的ALTER TABLE语句也可能更改使用col_name引用列的生成列表达式的值,而使用col_name引用列的生成列表达式的值也可能更改使用DEFAULT (col_name)引用列的生成列表达式的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值