暂无图片
暂无图片
6
暂无图片
暂无图片
2
暂无图片

PostgreSQL征途:逻辑结构管理之表1

0008.jpg

创建表

# 创建表 create table demo01(id int, note varchar(20)); # 创建的表包含主键 create table demo02(id int primary key, note varchar(20)); # 复合主键 create table demo03(id1 int, id2 int, note varchar(20), CONSTRAINT pk_test02 primary key(id1,id2)); # 指定唯一键 create table demo04(id1 int, id2 int, id3 int,note varchar(20), CONSTRAINT pk_test03 primary key(id1,id2), CONSTRAINT uk_test03_id3 UNIQUE(id3));
复制

pg0197.png

# check 约束形式 # 创建数据表 child,字段 age 要求不能大于18 CREATE TABLE child(name varchar(20), age int,note text, CONSTRAINT ck_child_age CHECK(age <18)); # 以其他表为模板来创建新表 CREATE TABLE baby(LIKE child);
复制

pg0198.png

  • 创建的 baby 表没有把 child 源表字段 ck_child_age 列上的约束复制过来;
  • 完全复制源表列上的约束和其他信息,则需要加 INCLUDING 关键字
    • INCLUDING DEFAULTS
    • INCLUDING CONSTRAINTS
    • INCLUDING INDEXES
    • INCLUDING STORAGE
    • INCLUDING COMMENTS
    • INCLUDING ALL:把所有的属性全部复制
CREATE TABLE baby2 (LIKE child INCLUDING ALL);
复制

pg0199.png

# 使用 CREATE TABLE...AS 创建表 CREATE TABLE baby3 AS SELECT * FROM child WITH NO DATA;
复制

pg0200.png

临时表

  • 会话级的临时表,数据可以一直保存在整个会话的生命周期中;
  • 事务级的临时表,数据只存在于这个事务的生命周期中;
  • 在PostgreSQL中,不管是事务级的临时表还是会话级的临时表,当会话结束时都会消失;
  • 如果在两个不同的session中创建一个同名的临时表,实际上创建的是两张不同的表;
# session1 create TEMPORARY table tmp_t1(id int primary key, note text); # session2
复制

pg0201.png

pg0202.png

insert into tmp_t1 values(1,'1111'); insert into tmp_t1 values(2,'2222'); select * from tmp_t1;
复制

pg0203.png

# 创建事务级的临时表 create TEMPORARY table tmp_t2(id int primary key, note text) on commit delete rows; begin; insert into tmp_t2 values(1,'aaaa'); insert into tmp_t2 values(2,'bbbb'); select * from tmp_t2; end; # 事务一旦结束,临时表中的数据就会消失 select * from tmp_t2;
复制

pg0204.png

ON COMMIT 形式

  • ON COMMIT PRESERVE ROWS: 若不带“ON COMMIT”子句,默认情况下,数据会一直存在于整个会话周期中;
  • ON COMMIT DELETE ROWS: 数据只存在于事务周期中,事务提交后数据就消失了;
  • ON COMMIT DROP: 数据只存在于事务周期中,事务提交后临时表就消失了。这种情况下,创建临时表的语句与插入数据的语句需要放到一个事务中,若把创建临时表的语句放在一个单独的事务
    中,事务一旦结束,这张临时表就会消失。

创建临时表时,关键字 TEMPORARY 也可以缩写为 TEMP

create TEMPORARY table tmp_t3(id int primary key, note text); create TEMP table tmp_t4(id int primary key, note text);
复制

pg0205.png

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

文章被以下合辑收录

评论

吾亦可往
暂无图片
6月前
评论
暂无图片 0
PostgreSQL征途:逻辑结构管理之表1
6月前
暂无图片 点赞
评论
星星之火
暂无图片
1年前
评论
暂无图片 0
也许你一生中走错了不少路,看错了不少人,承受了许多背叛,落魄得狼狈不堪。但是无所谓,全都过去了。只要还活着,总会有希望。余生还很长,你不必慌张!
1年前
暂无图片 点赞
评论