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

人大金仓数据库modify column功能介绍

原创 数据猿 2023-12-19
2509


modify column功能介绍

关键字:

Alter table、modify、人大金仓、KingbaseES

概述

该系列语法用于修改列中的定义,其语法可以总结为下述所示:

--修改单列的语法

ALTER TABLE table_name

MODIFIY column_name action;

--修改多列的语法

ALTER TABLE table_name

MODIFIY (

    column_name1 action,

    column_name2 action,

    ...

);

具体说明如下:

table_name:指要进行更改的表的名称。

column_name: 指要更改其定义的列名。

action:修改列的具体执行动作,其中支持的修改包括。

  1. 支持列设置NULL/NOT NULL。
  2. 设置列的默认值。
  3. 修改列的约束条件。
  4. 修改列的排序规则。
  5. 支持同时对多列的修改。

2.Modify column使用介绍

Alter table table_name modify(ColId [datatype] [collate_clause] [default_clause] [constraint_clause]);

具体用法用例如下

2.1修改列类型

Modify子句中列名后加类型名可以实现列的类型修改。

CREATE TABLE users_table(

    user_id INT generated by default as identity,

    first_name VARCHAR(30),

    last_name  VARCHAR(30),

    email VARCHAR(50),

    primary key (user_id)

);

insert into users_table(first_name, last_name, email) VALUES('Tom', 'King', '134-564-7894');

insert into users_table(first_name, last_name, email) VALUES('Melia', 'Peter', '131-584-7894');

insert into users_table(first_name, last_name, email) VALUES('Kik', 'Bob', '134-564-7894');

-- 修改数据类型

ALTER TABLE users_table modify(first_name text, email text);

ALTER TABLE users_table modify(first_name VARCHAR(30));

\d+ users_table

2.2修改列排序规则

在列中指定collate子句可以用于指定字符串数据的排序规则,排序规则决定字符串的比较方式,包括字符对大小写的敏感性及特殊字符的顺序。

--修改列排序规则

ALTER TABLE users_table modify(first_name COLLATE "C");

ALTER TABLE users_table modify(last_name COLLATE "POSIX");

\d+ users_table

2.3修改列默认值

在modify子句中列名支持指定DEFAULT子句,用于指定列的默认值。当出入新的数据时,如果没有显式指定值的情况下,将使用默认值填充该列。具体的用法如下:

ALTER TABLE users_table modify(first_name DEFAULT 'Default_first_name',last_name DEFAULT  'Default_last_name');

insert into users_table(first_name, last_name, email) VALUES('Tip', 'Tylie', '129-564-9547');

--查看表结构

\d+ users_table

--插入数据验证有默认值的列是否生效

insert into users_table(email) VALUES('123-564-3541');

select * from users_table;

2.4修改列级约束

当前modify子句支持修改NOT NULL/NULL、CHECK约束、外键约束、主键约束、唯一约束。

CREATE TABLE test_modify_table(

    modify_id number(5) primary key,

    first_name varchar(20),

    last_name  varchar(30)

);

ALTER TABLE test_modify_table modify(first_name varchar(50) default 'Tom' constraint name_check unique, last_name varchar(20) default 'Ji' unique);

\d test_modify_table

drop table test_modify_table;

约束修改后的表结构信息:

注:modify语句支持级联修改,也可指定约束名。单列上支持多个Check约束。

  • 修改check约束和not null约束

ALTER TABLE test_modify_table modify(modify_id default 0 check(modify_id > 5));

ALTER TABLE test_modify_table modify(modify_id default 0 check(modify_id > 5)), modify(first_name default 'Tat' constraint first_name_check not null);

ALTER TABLE test_modify_table modify(modify_id default 5 constraint modifyid_check check(modify_id > 5));

\d test_modify_table

--外键索引约束修改

CREATE TABLE reft1(f1 int PRIMARY KEY, f2 varchar(30));

CREATE TABLE reft2(f1 int PRIMARY KEY, f2 INTEGER); 

CREATE TABLE reft3(f1 int PRIMARY KEY, f2 INTEGER); 

ALTER TABLE reft2 modify(f2 default 1  REFERENCES reft1);

\d+ reft2

ALTER TABLE reft3 modify(f2 default 1  REFERENCES reft3);

\d+ reft3

--主键约束

ALTER TABLE reft2 modify(f2 default 2 primary key);-- 错误: 对表 "reft2" 指定多个主键是不允许的

CREATE TABLE test_modify_table_ttt1(a int, b varchar(30));

--在表中原不存在主键约束的情况下可以修改成功

ALTER TABLE test_modify_table_ttt1 modify(a default 2 primary key);

2.5modify语句组合

支持多条modify语句组合,并进行表中列的定义修改。

-- modify table cascade

CREATE TABLE modify_table_cascade(a INT, b VARCHAR(50), name TEXT, test_id INT);

ALTER TABLE modify_table_cascade modify(b COLLATE "C" default 'DefaultName'), modify (name COLLATE "C" default 'Bob');

\d+ modify_table_cascade

ALTER TABLE modify_table_cascade modify(b default 'DefaultName' unique), modify(name default 'Tom');

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论