postgresql逻辑结构--表(二)
一、创建表
语法:
create table table_name(
col01_name data_type,
col02_name data_type,
col03_name data_type,
);
1.1 创建表的时候可以指定主键:
postgres=# create table test01(
postgres(# id int primary key,
postgres(# note varchar(20));
CREATE TABLE
1.2 如果使用复合主键,则需要使用约束字句的语法:
constraint constrait_name primary key (coll_name, col2_name,...)
postgres=# create table test02(
postgres(# id1 int,
postgres(# id2 int,
postgres(# note varchar(20),
postgres(# constraint pk_test02 primary key (id1,id2));
CREATE TABLE
postgres=# \d test02
Table "public.test02"
Column | Type | Modifiers
--------+-----------------------+-----------
id1 | integer | not null
id2 | integer | not null
note | character varying(20) |
Indexes:
"pk_test02" PRIMARY KEY, btree (id1, id2) postgres=#
1.3 创建表指定唯一键,约束主键的一种。constraint constraint_name unique(col1_name,col2_anme,...)
postgres=# create table test03(
postgres(# id1 int
postgres(# ^C
postgres=# create table test03(
postgres(# id1 int,
postgres(# id2 int,
postgres(# id3 int,
postgres(# note varchar(20),
postgres(# constraint pk_test03 primary key(id1,id2),
postgres(# constraint uk_test03 unique(id3));
CREATE TABLE
1.4 check 也是一种约束形式,用于定义某些字段的值必须满足某种要求,
constraint constraint_name check(expression)
例如:建立一张child表,要求字段(age)不能大于18岁:
postgres=# create table child(
postgres(# name varchar(20),
postgres(# age int,
postgres(# note text,
postgres(# constraint ck_child_age check(age < 18));
CREATE TABLE
1.5 使用其他表作为模板创建新表:
postgres=# create table baby (like child);
CREATE TABLE
postgres=# \d baby
Table "public.baby"
Column | Type | Modifiers
--------+-----------------------+-----------
name | character varying(20) |
age | integer |
note | text | postgres=# \d child
Table "public.child"
Column | Type | Modifiers
--------+-----------------------+-----------
name | character varying(20) |
age | integer |
note | text |
Check constraints:
"ck_child_age" CHECK (age < 18) postgres=#
1.5 用模板创建的表没有把源表上的约束复制过来,如果想完全复制多来源表的其它信息,需要‘including’:
including defults
including constraints
including indexes
including storage
including comments
including all
postgres=# create table baby (like child including all);
CREATE TABLE
二、临时表
postgresql支持两类临时表,会话结束时,临时表就会消失。
会话临时表:数据可以一直保存在整个会话的生命周期中。
事务临时表:数据只存在于这个失误的生命周期中。
如果在两个不同的session中创建同名的临时表,实际上创建的两个不同的表。
postgres=# create temporary table tmp_t1(
postgres(# id int primary key,
postgres(# note text);
CREATE TABLE
postgres=# \d \\ 可以查到
List of relations
Schema | Name | Type | Owner
-----------+-------------+-------+----------
pg_temp_2 | tmp_t1 | table | postgres
当重新打开一个终端session时,用\d是查不到这个临时表的。\d把schema名称加上:
postgres=# \d pg_temp_2.tmp_t1;
Table "pg_temp_2.tmp_t1"
Column | Type | Modifiers
--------+---------+-----------
id | integer | not null
note | text |
Indexes:
"tmp_t1_pkey" PRIMARY KEY, btree (id)
# 可以查到,但是无法访问数据,也不可以插入修改数据。
创建事物级的临时表,加上 on commit delete rows
postgres=# create temporary table tmp_t2(id int primary key,note text) on commit delete rows;
CREATE TABLE
postgres=# begin;
BEGIN
postgres=# insert into tmp_t2 values(1,'aaa');
INSERT 0 1
postgres=# insert into tmp_t2 values(2,'bbb');
INSERT 0 1
postgres=# select * from tmp_t2;
id | note
----+------
1 | aaa
2 | bbb
(2 rows)
postgres=# end;
COMMIT
postgres=# select * from tmp_t2;
id | note
----+------
(0 rows)
# 事务结束后,表就消失了。
temporary 可以缩写成 temp
postgresql逻辑结构--表(二)的更多相关文章
- postgresql逻辑结构--表空间(四)
一.创建表空间 1. 语法:create tablespace tablespace_name [owner user_name] location 'directory' postgres=# cr ...
- PostgreSQL的存储系统二:REDOLOG文件存储结构二
REDOLOG文件里的用户数据和数据文件里的用户数据存储结构相同 几个月前同事给台湾一家公司培训<pg9 ad admin>时,有个学员提及WAL里记录的内容为Query时的SQL语句(比 ...
- mybatis使用注解往postgresql数据库表insert数据[主键自增]的写法
建表SQL: DROP TABLE IF EXISTS person; CREATE TABLE person( person_id serial PRIMARY KEY NOT NULL, pers ...
- Postgresql两表联结更新
Postgresql两表联合更新近日使用Postgresql感到有点不好用,一个联合更新非要这样写语法才对:update d_routetripset name=b.name , descrip ...
- postgresql逻辑结构(一)
一.数据库逻辑结构介绍 数据库:应用连接到一个数据库时,一般不能访问其它数据库,除非使用dblink等其他手段. 表.索引:postgresql中标的术语为relation,其它数据库中成为table ...
- [转]PostgreSQL 逻辑结构 和 权限体系 介绍
摘要: 本文旨在帮助用户理解PostgreSQL的逻辑结构和权限体系,帮助用户快速的理解和管理数据库的权限. 逻辑结构 最上层是实例,实例中允许创建多个数据库,每个数据库中可以创建多个schema,每 ...
- 跟我一起读postgresql源码(二)——Parser(查询分析模块)
上篇博客简要的介绍了下psql命令行客户端的前台代码.这一次,我们来看看后台的代码吧. 十分不好意思的是,上篇博客我们只说明了前台登陆的代码,没有介绍前台登陆过程中,后台是如何工作的.即:后台接到前台 ...
- ORACLE体系结构一 (逻辑结构)-表空间、段、区和数据块
一.Oracle的逻辑结构 Oracle的逻辑结构是一种层次结构.主要由:表空间.段.区和数据块等概念组成.逻辑结构是面向用户的,用户使用Oracle开发应用程序使用的就是逻辑结构.数据库存储层次结构 ...
- ORACLE体系结构逻辑结构-表空间、段、区和数据块
转自: https://www.cnblogs.com/sunziying/p/8994792.html 一.Oracle的逻辑结构 Oracle的逻辑结构是一种层次结构.主要由:表空间.段.区和数据 ...
随机推荐
- restfull和传统http的区别
摘自 https://bbs.csdn.net/topics/390716580 restfull是一种风格,不是规范,也不是所谓的封装,他只是将http协议用的更彻底了,我们在普通的开发中,虽然说是 ...
- Alpha冲刺 - (10/10)
Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 本人负责的模块(共享编辑)的前端代码 ...
- 28、vSocket模型详解及select应用详解
在上片文章已经讲过了TCP协议的基本结构和构成并举例,也粗略的讲过了SOCKET,但是讲解的并不完善,这里详细讲解下关于SOCKET的编程的I/O复用函数. 1.I/O复用:selec函数 在介绍so ...
- 如果datanode连接不上namenode,导致datanode无法启动。
如果datanode连接不上namenode,导致datanode无法启动. 问题: ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: j ...
- 数组中超过N分之一的数字
寻找数组中超过一半的元素,这是一道十分经典和普遍的面试题了,实现起来比较容易,只是需要写技巧,将问题扩展就可以衍生到求数组中几个超过N分一的元素,例如找出数组中3个出现次数超过1/4的元素. /*** ...
- AngularJS controller as vm方式
从AngularJS1.20开始引入了Controller as 新语法,以前版本在Controller 中必须注入$scope这个服务,才能在视图绑定中使用这些变量,$scope不是那么POJO(普 ...
- 电容器的ESR
电容器的ESR(等效串联电阻)Equivalent Series Resistance 作为开关电源的输出整流滤波电容器,电容量往往是首要的选择,铝电解电容器的电容量完全可以满足要求,而ESR则 ...
- Python基础语法-内置数据结构之列表
列表的一些特点: 列表是最常用的线性数据结构 list是一系列元素的有序组合 list是可变的 列表的操作, 增:append.extend.insert 删:clear.pop.remove 改:r ...
- C# 读取资源文件.resx 中的xml资源
主要是以字符串的形式来读取xml,然后通过遍历读取节点,通过节点属性名称获取属性值 /// <summary> /// 初始化OPC参数配置 /// </summary> // ...
- Fiddler工具使用介绍三
我们知道Fiddler是位于客户端和服务器之间的代理,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的数据,甚至可以修改 ...