11.GaussDB普通表的管理

1.创建行存表

sjzt=> create table emp(id int,ename varchar(20),sal number,empno int,deptno int) distribute by hash(empno);
CREATE TABLE
insert into emp values(1,'xsq1',2000,6379,10);
sjzt=> create table dept(deptno int,name varchar(20));
CREATE TABLE
sjzt=> create table emp1 as select * from emp where sal<2000;
INSERT 0 0
sjzt=> create table emp2 as table emp;
INSERT 0 0

2.创建表并使用特定表空间

-- 表不存在时才创建,使得当该表存在时该建表语句不会报错
 -- 事务结束时检查字段是否有重复
 -- 缺省值为'GA'
 --需要给用户授予表空间的CREATE权限,才可以在表空间中创建对象。
gaussdb=> grant create on tablespace tbs3 to sjzt;
GRANT

sjzt=> CREATE TABLE IF NOT EXISTS warehouse_t1 
(
W_WAREHOUSE_SK INTEGER NOT NULL,
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20) UNIQUE DEFERRABLE,
W_SUITE_NUMBER CHAR(10),
W_STATE CHAR(2) DEFAULT 'GA', 
W_GMT_OFFSET DECIMAL(5,2)
) TABLESPACE tbs3;
NOTICE:  CREATE TABLE / UNIQUE will create implicit index "warehouse_t1_w_warehouse_name_key" for table "warehouse_t1"
CREATE TABLE
-- 创建非日志表,即不写入预写日志
-- 主键约束,-- 唯一键约束,-- 检查列约束
sjzt=> 
CREATE UNLOGGED TABLE warehouse_t2  
(
W_WAREHOUSE_SK INTEGER PRIMARY KEY, 
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20) UNIQUE, 
W_GMT_OFFSET DECIMAL(5,2) ,
CONSTRAINT W_CONSTR_KEY2 CHECK(W_WAREHOUSE_SK > 0 AND W_WAREHOUSE_NAME IS NOT NULL) 
) WITH(fillfactor=70);

NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "warehouse_t2_pkey" for table "warehouse_t2"
NOTICE:  CREATE TABLE / UNIQUE will create implicit global secondary index "warehouse_t2_w_warehouse_name_key_g" for table "warehouse_t2"
CREATE TABLE

3.列存表创建

--列存表创建:
 -- 局部聚簇存储
 -- 带有压缩特性的列存储表(列存储表不支持约束)
sjzt=> CREATE TABLE warehouse_t3
(
W_WAREHOUSE_SK INTEGER NOT NULL,
W_WAREHOUSE_ID CHAR(16) NOT NULL,
W_WAREHOUSE_NAME VARCHAR(20),
W_GMT_OFFSET DECIMAL(5,2),
PARTIAL CLUSTER KEY(W_WAREHOUSE_SK, W_WAREHOUSE_ID)
) WITH (ORIENTATION = COLUMN, COMPRESSION=HIGH);  
NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'w_warehouse_sk' as the distribution column by default.
HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
CREATE TABLE

4.修改表的属性

--修改表属性:
--WHERE条件创建表。
sjzt=> create table emp1 as select * from emp where sal<2000;
NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'id' as the distribution column by default.
HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
INSERT 0 0
--AS 创建表。
sjzt=> create table emp2 as table emp;
NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'id' as the distribution column by default.
HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
INSERT 0 1
--修改列属性。
sjzt=> alter table emp1 modify sal number(10,2);
ALTER TABLE
--重命名列名称。
sjzt=> alter table emp1 rename column ename to name;
ALTER TABLE
 --无法直接创建主键,必须保护分布列。emp1的分布列是ID;
sjzt=> alter table emp1 add primary key (empno);
ERROR:  Cannot create index whose evaluation cannot be enforced to remote nodes
sjzt=> \d+ emp1
                                 Table "sjzt.emp1"
 Column |         Type          | Modifiers | Storage  | Stats target | Description 
--------+-----------------------+-----------+----------+--------------+-------------
 id     | integer               |           | plain    |              | 
 name   | character varying(20) |           | extended |              | 
 sal    | numeric(10,2)         |           | main     |              | 
 empno  | integer               |           | plain    |              | 
 deptno | integer               |           | plain    |              | 
Has OIDs: no
Distribute By: HASH(id)
Location Nodes: ALL DATANODES
Options: orientation=row, compression=no

--添加主键,需要增加分布列。
sjzt=> alter table emp1 add primary key (empno,id);
NOTICE:  ALTER TABLE / ADD PRIMARY KEY will create implicit index "emp1_pkey" for table "emp1"
ALTER TABLE
--添加检查约束。
sjzt=>  alter table emp1 add constraint chk_dept check (deptno is not null);
ALTER TABLE

--GaussDB目前不支持外键约束。
sjzt=>  alter table emp1 add constraint fk_dept foreign key (deptno) references dept(deptno);
ERROR:  FOREIGN KEY ... REFERENCES constraint is not yet supported.
--设置sal列为非空约束。
sjzt=> alter table emp1 modify sal constraint chk_sal not null; 
ALTER TABLE
--重命名约束名称
sjzt=> alter table emp1 rename constraint chk_dept to chk_deptno;
ALTER TABLE
--重置schema;
sjzt=> alter table emp1 set schema mydb1;
ALTER TABLE
--表重命名
sjzt=> alter table mydb1.emp1 rename to emp2;
ALTER TABLE
sjzt=> \d mydb1.emp2
             Table "mydb1.emp2"
 Column |         Type          | Modifiers 
--------+-----------------------+-----------
 id     | integer               | not null
 name   | character varying(20) | 
 sal    | numeric(10,2)         | not null
 empno  | integer               | not null
 deptno | integer               | 
Indexes:
    "emp1_pkey" PRIMARY KEY, btree (empno, id) TABLESPACE pg_default
Check constraints:
    "chk_deptno" CHECK (deptno IS NOT NULL)

5.总结

(1)使用表空间需要有对表空间的CREATE权限。

(2)GaussDB MYSQL兼容模式不支持外键。

(3)GaussDB 支持列存和行存表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值