使用MariaDB 10.1.30执行ALTER TABLE ADD COLUMN为何显示0 rows affected?
为什么MariaDB执行ALTER TABLE ADD COLUMN后显示0 rows affected?
嘿,这个疑问其实挺普遍的,我来给你掰扯明白~
先看你执行命令后的输出:
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
你已经理解后面几行的含义,那重点说为啥会显示0 rows affected。
在MariaDB(包括MySQL)里,ALTER TABLE ADD COLUMN操作的rows affected统计的是被修改的实际数据行数量,而非表的总行数。当你添加新列时:
- 如果新列允许
NULL(这是默认行为),数据库只需要修改表的元数据(也就是表结构定义),不需要逐个更新每一行的数据——因为新列默认值就是NULL,数据库不需要实际写入任何内容到数据行里。 - 就算你给新列设置了非NULL的默认值,像MariaDB 10.1.30这类版本默认用
INPLACE算法执行ALTER操作,数据库也不会真的把默认值写入每一行,而是在元数据里记录这个默认值,查询时再动态返回,所以同样不会有数据行被修改,自然显示0 rows affected。
只有当你强制使用ALGORITHM=COPY算法(比如执行ALTER TABLE 表名 ADD COLUMN 列名 类型 DEFAULT 'xxx' ALGORITHM=COPY;),数据库才会复制整个表并给每一行填充默认值,这时候rows affected才会等于表的总行数。
总结一下:这个0 rows affected完全是正常现象,说明你的表结构修改成功,且没有修改任何实际的数据行,操作效率很高哦~
内容的提问来源于stack exchange,提问作者lkp111138
相关产品推荐
相关产品推荐

