暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

StoneDB中变更字段的属性

StoneDB 2024-03-12
112


在数据库日常运维中,我们需要对表结构做变更,如添加字段、变更字段的属性等操作来满足业务需求。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 变更操作,也建议在计划窗口的时间内执行。



          加入StoneDB社区
          Github:https://github.com/stoneatom/stonedb
          Gitee:https://gitee.com/StoneDB/stonedb
          社区官网:https://stonedb.io/
          哔哩哔哩:https://space.bilibili.com/1154290084
          Twitter:https://twitter.com/StoneDataBase
          Linkedin:https://www.linkedin.com/in/stonedb/

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




          文章转载自StoneDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论