在 GBase 8s 中,ALTER TABLE 命令用于添加,修改,删除一张已经存在表的列。
另外你也可以用 ALTER TABLE 命令添加和删除约束。
语法
用 ALTER TABLE 在一张已存在的表上添加列的语法如下:
ALTER TABLE table_name ADD column_name datatype;
在一张已存在的表上 DROP(删除列),语法如下:
ALTER TABLE table_name DROP column_name;
修改表中某列的 DATATYPE(数据类型),语法如下:
ALTER TABLE table_name MODIFY column_name datatype;
给表中某列添加 NOT NULL 约束,语法如下:
ALTER TABLE table_name MODIFY column_name datatype NOT NULL;
给表中某列 ADD UNIQUE CONSTRAINT( 添加 UNIQUE 约束),语法如下:
ALTER TABLE table_name
ADD CONSTRAINT UNIQUE(column1, column2...) [CONSTRAINT constraint_name] ;
给表中 ADD CHECK CONSTRAINT(添加 CHECK 约束),语法如下:
ALTER TABLE table_name
ADD CONSTRAINT CHECK(condition) [CONSTRAINT constraint_name];
给表 ADD PRIMARY KEY(添加主键),语法如下:
ALTER TABLE table_name
ADD CONSTRAINT PRIMARY KEY(column1, column2...) [CONSTRAINT constraint_name] ;
DROP CONSTRAINT (删除约束),语法如下:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
实例
创建 COMPANY 表,数据内容如下:
DROP TABLE IF EXISTS COMPANY;
CREATE TABLE COMPANY(
ID SERIAL PRIMARY KEY,
NAME VARCHAR(40) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY DECIMAL(10,2),
JOIN_DATE DATE DEFAULT TODAY
);
INSERT INTO COMPANY VALUES (0, '李雷', 37, '北京', 20000.00,'2005-05-13');
INSERT INTO COMPANY VALUES (0, '韩梅梅', 35, '天津', 16000.00, '2007-12-18');
INSERT INTO COMPANY VALUES (0, '林涛', 36, '上海', 25000.00, '2006-01-04');
INSERT INTO COMPANY VALUES (0, '魏华', 36, '西安', 15000.00, '2007-08-30');
INSERT INTO COMPANY VALUES (0, '露茜', 34, '伦敦', 22000.00, '2008-08-08');
INSERT INTO COMPANY VALUES (0, '莉莉', 34, '伦敦', 22000.00, '2008-08-08');
INSERT INTO COMPANY VALUES (0, '吉姆', 35, '华盛顿', 16000.00, '2010-12-13');
INSERT INTO COMPANY VALUES (0, '汤姆', 36, '渥太华', 21000.00, '2010-04-30');
此时,COMPANY的表记录为:
id | name | age | address | salary | join_date |
---|---|---|---|---|---|
1 | 李雷 | 37 | 北京 | 20000.00 | 2005-05-13 |
2 | 韩梅梅 | 35 | 天津 | 16000.00 | 2007-12-18 |
3 | 林涛 | 36 | 上海 | 25000.00 | 2006-01-04 |
4 | 魏华 | 36 | 西安 | 15000.00 | 2007-08-30 |
5 | 露茜 | 34 | 伦敦 | 22000.00 | 2008-08-08 |
6 | 莉莉 | 34 | 伦敦 | 22000.00 | 2008-08-08 |
7 | 吉姆 | 35 | 华盛顿 | 16000.00 | 2010-12-13 |
8 | 汤姆 | 36 | 渥太华 | 21000.00 | 2010-04-30 |
下面实例在这张表中添加新的列sex,位于age 字段之前:
alter table company add sex smallint default 1 before age;
现在表长这样,增加了sex字段,并有默认值:
id | name | sex | age | address | salary | join_date |
---|---|---|---|---|---|---|
1 | 李雷 | 1 | 37 | 北京 | 20000.00 | 2005-05-13 |
2 | 韩梅梅 | 1 | 35 | 天津 | 16000.00 | 2007-12-18 |
3 | 林涛 | 1 | 36 | 上海 | 25000.00 | 2006-01-04 |
4 | 魏华 | 1 | 36 | 西安 | 15000.00 | 2007-08-30 |
5 | 露茜 | 1 | 34 | 伦敦 | 22000.00 | 2008-08-08 |
6 | 莉莉 | 1 | 34 | 伦敦 | 22000.00 | 2008-08-08 |
7 | 吉姆 | 1 | 35 | 华盛顿 | 16000.00 | 2010-12-13 |
8 | 汤姆 | 1 | 36 | 渥太华 | 21000.00 | 2010-04-30 |
下面实例删除 sex 列:
alter table company drop sex;
得到结果如下:
id | name | age | address | salary | join_date |
---|---|---|---|---|---|
1 | 李雷 | 37 | 北京 | 20000.00 | 2005-05-13 |
2 | 韩梅梅 | 35 | 天津 | 16000.00 | 2007-12-18 |
3 | 林涛 | 36 | 上海 | 25000.00 | 2006-01-04 |
4 | 魏华 | 36 | 西安 | 15000.00 | 2007-08-30 |
5 | 露茜 | 34 | 伦敦 | 22000.00 | 2008-08-08 |
6 | 莉莉 | 34 | 伦敦 | 22000.00 | 2008-08-08 |
7 | 吉姆 | 35 | 华盛顿 | 16000.00 | 2010-12-13 |
8 | 汤姆 | 36 | 渥太华 | 21000.00 | 2010-04-30 |
下面实例在这张表中修改字段address的数据类型,并限制not null :
alter table company modify address varchar(60) not null;
下面实例在这张表中为字段salary增加check约束:
alter table company add constraint check(salary > 2000) constraint con_chk_company;
下面实例在这张表中删除约束:
alter table company drop constraint con_chk_company;