
在数据库日常运维中,我们需要对表结构做变更,如添加字段、变更字段的属性等操作来满足业务需求。StoneDB 支持多种 DDL 操作对表结构的变更,本文介绍的是在 StoneDB 中如何变更字段的属性。StoneDB 支持如下 8 种 DDL 操作对字段的属性做变更。
修改字段的数据类型修改字段的数据类型长度修改字段非空约束修改字段为空约束修改字段的字符集设置字段的默认值删除字段的默认值重命名字段
以上 8 种 DDL 语法如下所示:
-- 修改字段的数据类型alter table t_name modify column_name data_type;-- 修改字段的数据类型长度alter table t_name modify column_name data_type(N);-- 修改字段非空约束alter table t_name modify column_name data_type not null;-- 修改字段为空约束alter table t_name modify column_name data_type default null;-- 修改字段的字符集alter table t_name modify column_name data_type character set charset;-- 设置字段的默认值alter table t_name alter column column_name set default xxx;-- 删除字段的默认值alter table t_name alter column column_name drop default;-- 重命名字段alter table t_name rename column old_column to new_column;
在 MySQL 中,"alter table modify" 命令也是用来修改字段的属性,另外 MySQL 还提供了 "alter table change" 命令,change 命令是 modify 命令的扩展,相当于 modify + rename column,即可以同时修改字段的属性和字段的名字,语法如下所示:
alter table t_name change old_column new_column datatype constraint;
如果数据类型和约束条件没有变化,则 "alter table change" 命令只是修改了字段的名字,而如果数据类型或者约束条件有变化,则 "alter table change" 命令同时修改了这个字段的属性和这个字段的名字。
在 MySQL 中,"alter table change" 和 "alter table modify" 的使用方法可以总结如下:
1)若仅修改字段的属性,则可以使用 "alter table modify";
2)若仅修改字段的名字,则可以使用 "alter table change" 或者 "alter table rename";
3)若同时修改字段的名字和字段的属性,则可以使用 "alter table change"。
相比 MySQL,StoneDB 目前是不支持 "alter table change" 命令的,后续会得到支持。若当前想对字段重命名,则可以选择使用 "alter table rename" 命令。同时 StoneDB 不支持如下的 DDL 操作对字段的属性做变更。
修改字段的注释设置自增属性
之所以这么设计,是因为以上 DDL 操作在数据库日常运维中极少使用到,如设置自增属性这项变更操作。我们知道在表设计阶段就会定义好主键,并且会定义这个主键是属于自增型的,线上环境极少会再次对主键进行变更。而字段的注释一般情况下也会在表设计阶段就会定义好,不会再轻易做修改。
做 DDL 变更操作时,不仅会持有锁资源,如果表的数据量较大,那么还会大量消耗操作系统的 CPU 资源和 IO 资源,如果配置了主从复制的架构,还会造成从库延迟复制。因此,在日常运维中,即使是对小表的 DDL 变更操作,也建议在计划窗口的时间内执行。


加入微信群:添加社区助理-小石侠




