南大通用数据库-Gbase-8a-学习-40-修改字段类型、默认值、非空属性等

目录

一、环境信息

[二、ALTER TABLE语法树](#二、ALTER TABLE语法树)

三、修改字段类型

1、字段varchar类型修改实验

2、其他类型修改实验

四、修改字段默认值、非空属性

五、总结


一、环境信息

|-----------|-------------------------------------------|
| 名称 | 值 |
| CPU | Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz |
| 操作系统 | CentOS Linux release 7.9.2009 (Core) |
| 内存 | 3G |
| 逻辑核数 | 2 |
| Gbase8a版本 | 8.6.2-R43.34.27468a27 |

二、ALTER TABLE语法树

sql 复制代码
ALTER TABLE [VCNAME.][database_name.]table_name
 alter_specification [, alter_specification] ...
alter_specification:
 ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
 | ADD [COLUMN] (column_definition,...)
 | CHANGE [COLUMN] old_col_name new_col_name column_definition
 | MODIFY [COLUMN] col_name column_definition
 [FIRST | AFTER col_name]
 | RENAME [TO] new_table_name
 | DROP [COLUMN] col_name

|-------------------|---------------------------------------------------|
| 名称 | 描述 |
| ADD [COLUMN] | 添加字段,关键字FIRST、AFTER分别表示添加到指定字段的前和后,如果不指定,就是添加到表尾。 |
| CHANGE [COLUMN] | 修改字段名,但不支持修改类型、非空、默认值等,但支持列注释。 |
| MODIFY [COLUMN] | 修改字段在表中的位置,其他同上。 |
| RENAME [TO] | 修改表名。 |
| DROP [COLUMN] | 删除字段。 |

三、修改字段类型

8a修改字段数据类型目前只支持varchar类型到varchar类型。

1、字段varchar类型修改实验

建测试表

sql 复制代码
gbase> CREATE TABLE TEST_09_19 (A VARCHAR(10), B VARCHAR(100) NOT NULL DEFAULT 'TEST_DEFAULT_VAL' COMMENT'TEST', C INT);
Query OK, 0 rows affected (Elapsed: 00:00:00.02)

gbase> DESC TEST_09_19;
+-------+--------------+------+-----+------------------+-------+
| Field | Type         | Null | Key | Default          | Extra |
+-------+--------------+------+-----+------------------+-------+
| A     | varchar(10)  | YES  |     | NULL             |       |
| B     | varchar(100) | NO   |     | TEST_DEFAULT_VAL |       |
| C     | int(11)      | YES  |     | NULL             |       |
+-------+--------------+------+-----+------------------+-------+
3 rows in set (Elapsed: 00:00:00.00)

增加字段A的长度正常

sql 复制代码
gbase> ALTER TABLE TEST_09_19 CHANGE A A VARCHAR(101);
Query OK, 0 rows affected (Elapsed: 00:00:00.17)
Records: 0  Duplicates: 0  Warnings: 0

增加字段B的长度报错,注意需要加上默认值和非空、注释等

sql 复制代码
gbase> ALTER TABLE TEST_09_19 CHANGE B B VARCHAR(101);
ERROR 1702 (HY000): gcluster table error: This version of GBase doesn't yet support 'such options, check default value and comment'. 

我们加上再试试,执行正常。

sql 复制代码
gbase> ALTER TABLE TEST_09_19 CHANGE B B VARCHAR(101) NOT NULL DEFAULT 'TEST_DEFAULT_VAL' COMMENT'TEST';
Query OK, 0 rows affected (Elapsed: 00:00:00.10)
Records: 0  Duplicates: 0  Warnings: 0

如果我们只是变化默认值,其他不变看看,提示不支持修改默认值。

sql 复制代码
gbase> ALTER TABLE TEST_09_19 CHANGE B B VARCHAR(101) NOT NULL DEFAULT 'TEST_DEFAULT_VAL1' COMMENT'TEST';
ERROR 1702 (HY000): gcluster table error: This version of GBase doesn't yet support 'change default value'. 

如果我们只是变化注释,其他不变看看,执行正常。

sql 复制代码
gbase> ALTER TABLE TEST_09_19 CHANGE B B VARCHAR(101) NOT NULL DEFAULT 'TEST_DEFAULT_VAL' COMMENT'TEST1';
Query OK, 0 rows affected (Elapsed: 00:00:00.12)
Records: 0  Duplicates: 0  Warnings: 0

2、其他类型修改实验

测试数据生成

sql 复制代码
gbase> DESC TEST_09_19;
+-------+--------------+------+-----+------------------+-------+
| Field | Type         | Null | Key | Default          | Extra |
+-------+--------------+------+-----+------------------+-------+
| A     | varchar(101) | YES  |     | NULL             |       |
| B     | varchar(101) | NO   |     | TEST_DEFAULT_VAL |       |
| C     | int(11)      | YES  |     | NULL             |       |
+-------+--------------+------+-----+------------------+-------+
3 rows in set (Elapsed: 00:00:00.00)

gbase> INSERT INTO TEST_09_19 VALUES('SUN','MOON',1);
Query OK, 1 row affected (Elapsed: 00:00:00.28)

gbase> INSERT INTO TEST_09_19 VALUES('SUN','MOON',2);
Query OK, 1 row affected (Elapsed: 00:00:00.04)

gbase> SELECT * FROM TEST_09_19;
+------+------+------+
| A    | B    | C    |
+------+------+------+
| SUN  | MOON |    1 |
| SUN  | MOON |    2 |
+------+------+------+
2 rows in set (Elapsed: 00:00:00.41)

测试int->varchar,提示:修改列定义,除了增加varchar长度都不支持。

sql 复制代码
gbase> ALTER TABLE TEST_09_19 CHANGE C C VARCHAR(101);
ERROR 1702 (HY000): gcluster table error: This version of GBase doesn't yet support 'ALTER column definition except increasing length of varchar'. 

那我们曲线救援,通过新建复制字段->更新数据到复制字段->删除老字段->修改复制字段名为老字段名的方式,来实现字段类型修改。

sql 复制代码
gbase> ALTER TABLE TEST_09_19 ADD COLUMN C_CopyColumn VARCHAR(10) AFTER C;
Query OK, 2 rows affected (Elapsed: 00:00:00.08)
Records: 2  Duplicates: 2  Warnings: 0

gbase> UPDATE TEST_09_19 SET C_CopyColumn = C;
Query OK, 2 rows affected (Elapsed: 00:00:00.10)
Rows matched: 2  Changed: 2  Warnings: 0

gbase> ALTER TABLE TEST_09_19 DROP C;
Query OK, 2 rows affected (Elapsed: 00:00:00.24)
Records: 2  Duplicates: 2  Warnings: 0

gbase> ALTER TABLE TEST_09_19 CHANGE C_CopyColumn C VARCHAR(10) COMMENT'';
Query OK, 0 rows affected (Elapsed: 00:00:00.22)
Records: 0  Duplicates: 0  Warnings: 0

验证正确性

sql 复制代码
gbase> DESC TEST_09_19;
+-------+--------------+------+-----+------------------+-------+
| Field | Type         | Null | Key | Default          | Extra |
+-------+--------------+------+-----+------------------+-------+
| A     | varchar(101) | YES  |     | NULL             |       |
| B     | varchar(101) | NO   |     | TEST_DEFAULT_VAL |       |
| C     | varchar(10)  | YES  |     | NULL             |       |
+-------+--------------+------+-----+------------------+-------+
3 rows in set (Elapsed: 00:00:00.01)

gbase> SELECT * FROM TEST_09_19;
+------+------+------+
| A    | B    | C    |
+------+------+------+
| SUN  | MOON | 1    |
| SUN  | MOON | 2    |
+------+------+------+
2 rows in set (Elapsed: 00:00:00.09)

四、修改字段默认值、非空属性

通过上面的实验和语法树了解,8a暂时不支持通过ALTER语句修改字段默认值、非空属性,只有通过重建表来曲线救援了,如果有其他大佬知道的,可以分享大家一起学习一下。

五、总结

1、ALTER TABLE CHANGE语句只支持VARCHAR到VARCHAR的类型转换,且是小范围到大范围的。

2、ALTER TABLE CHANGE语句支持注释修改。

3、其他类型修改需要通过:新建复制字段->更新数据到复制字段->删除老字段->修改复制字段名为老字段名的方式实现。

4、字段默认值、非空属性等需要通过重建表来实现。

相关推荐
小光学长1 小时前
基于vue框架的防疫科普网站0838x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
知识分享小能手1 小时前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
极限实验室1 小时前
使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建
数据库·docker·devops
飞翔的佩奇1 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
GuokLiu1 小时前
250708-Debian系统安装Edge浏览器并配置最小中文输入法
运维·edge·debian
pay4fun1 小时前
2048-控制台版本
c++·学习
guygg882 小时前
ubuntu手动编译VTK9.3 Generating qmltypes file 失败
linux·运维·ubuntu
知识分享小能手3 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3
先做个垃圾出来………3 小时前
自动化一次通过率
运维·自动化
float_六七3 小时前
SQL六大核心类别全解析
数据库·sql·oracle