普通表管理
以下命令均已在金仓kingbase数据库oracle兼容模式下验证,都是比较常用的命令示例
创建表
--创建表
create table managers(id int unique,name varchar);
CREATE TABLE my_secure_table (
id bigint GENERATED BY DEFAULT AS IDENTITY, -- 自动递增主键
name VARCHAR2(100) NOT NULL, -- 字符串类型,不允许为空
description CLOB, -- 大文本类型
price NUMBER(10, 2), -- 数值类型,两位小数
active CHAR(1) CHECK (active IN ('Y', 'N')), -- 单字符类型,带有检查约束
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 时间戳类型,默认当前时间
updated_at TIMESTAMP, -- 时间戳类型
binary_data BLOB, -- 二进制大对象类型
email VARCHAR2(255) UNIQUE, -- 唯一字符串类型
manager_id int, -- 将作为外键
CONSTRAINT pk_my_secure_table PRIMARY KEY (id) USING INDEX TABLESPACE index_tablespace, -- 主键约束,并指定索引表空间
CONSTRAINT uk_email UNIQUE (email) USING INDEX TABLESPACE index_tablespace, -- 唯一键约束,并指定索引表空间
CONSTRAINT fk_manager FOREIGN KEY (manager_id) REFERENCES managers(id) -- 外键约束
)
TABLESPACE data_tablespace; -- 指定数据表空间
注意:外键列和被引用列的数据类型需要一致,标识列id类型必须为 tinyint、smallint、integer 或 bigint
-- 添加注释到表和列
COMMENT ON TABLE my_secure_table IS '这是一个安全存储业务实体的表';
COMMENT ON COLUMN my_secure_table.id IS '主键标识';
COMMENT ON COLUMN my_secure_table.name IS '实体名称,必须提供';
COMMENT ON COLUMN my_secure_table.description IS '关于实体的描述信息';
COMMENT ON COLUMN my_secure_table.price IS '实体的价格,精确到两位小数';
COMMENT ON COLUMN my_secure_table.active IS '是否激活,只能是 Y 或 N';
COMMENT ON COLUMN my_secure_table.created_at IS '记录创建的时间戳';
COMMENT ON COLUMN my_secure_table.updated_at IS '记录最后更新的时间戳';
COMMENT ON COLUMN my_secure_table.binary_data IS '二进制数据字段';
COMMENT ON COLUMN my_secure_table.email IS '唯一的电子邮件地址';
COMMENT ON COLUMN my_secure_table.manager_id IS '管理者的ID,关联到managers表';
给表增加列
alter table managers add column depno int;
修改表列类型
alter table managers alter COLUMN depno type bigint;
删除表列
alter table managers drop column depno ;
设置列非空约束
alter table managers alter COLUMN name set not null;
删除列非空约束
alter table managers alter COLUMN name drop not null ;
设置列检查约束
create table products(id varchar,name varchar,price numeric,created_at date,email varchar);
-- 确保 price 列的值大于等于 0
ALTER TABLE products
ADD CONSTRAINT chk_price_positive CHECK (price >= 0);
-- 确保 created_at 列的时间戳不早于 '2000-01-01'
ALTER TABLE products
ADD CONSTRAINT chk_created_at_min_date CHECK (created_at >= '2000-01-01');
-- 确保 name 列的长度不超过 50 个字符
ALTER TABLE products
ADD CONSTRAINT chk_name_length CHECK (LENGTH(name) <= 50);
-- 确保 email 列包含 '@' 符号(简单的电子邮件格式检查)
ALTER TABLE products
ADD CONSTRAINT chk_email_format CHECK (email ~* '^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$');
删除列检查约束
alter table products drop constraint chk_created_at_min_date;
设置列唯一约束
alter table products add constraint products_id_uniq unique(id);
--添加唯一约束会自动添加唯一索引
删除唯一约束
alter table products drop constraint products_id_uniq;
--删除唯一约束会连着删除唯一索引
设置列主键约束
alter table products add constraint products_id_pri primary key (id);
--添加主键约束会自动创建主键索引和在列上添加非空约束
删除列主键约束
alter table products drop constraint products_id_pri;
--删除主键约束会连着删除主键索引,但不会自动去掉非空约束
alter table products alter COLUMN id drop not null ;
设置列外键约束
alter table products add constraint products_id_fk foreign key (id) references managers(id);
alter table products add constraint products_id_fk foreign key (id) references managers(id) on delete cascade on update no action;
注意:
ON DELETE CASCADE 指示当父表中的行被删除时,所有子表中相关的行也会自动被删除。
ON UPDATE NO ACTION 是默认行为,表示如果尝试更新父表中的键值,而该键值正在被子表中的行引用,则会阻止更新操作。
可以根据需要选择不同的选项,如 CASCADE, SET NULL, RESTRICT 或 NO ACTION。
删除外键约束
alter table products drop constraint products_id_fk;
添加表和列注释
-- 添加注释到表和列
COMMENT ON TABLE my_secure_table IS '这是一个安全存储业务实体的表';
COMMENT ON COLUMN my_secure_table.id IS '主键标识';
删除表和列注释
COMMENT ON TABLE my_secure_table IS '';
COMMENT ON COLUMN my_secure_table.id IS '';
设置表列排序规则
alter table products alter COLUMN id type varchar collate c;
去除表列排序规则设置
alter table products alter COLUMN id type varchar;
表列重命名
alter table products rename id to proid;
表约束重命名
alter table products rename CONSTRAINT chk_email_format TO chk_email_format_2;
表重命名
alter table products rename TO products_his;
修改表所属模式
alter table products_his set schema his ;
修改表所在表空间
alter table his.products_his set tablespace data_tablespace ;
修改表的属主
alter table his.products_his owner to zy;
禁用表约束
alter table his.products_his disable constraint products_id_fk;
启用表约束
alter table his.products_his enable constraint products_id_fk;
设置表填充因子
alter table his.products_his set (fillfactor =50);
--默认是100
设置表vacuum参数
alter table his.products_his set (autovacuum_vacuum_threshold=500);
设置表列默认值
alter table his.products_his alter COLUMN created_at set default now();
删除表列默认值
alter table his.products_his alter COLUMN created_at drop default ;
清空表
truncate table his.products_his ;
truncate his.products_his ;
删除表
drop table his.products_his ;
新建表CREATE TABLE AS
create table tuser as select * from sys_user where 1=2;
--复制表结构,不复制数据和注释和索引
新建表CREATE TABLE LIKE
create table tuser (like sys_user including all);
--复制表结构,注释和索引,不复制数据