创建表

  语法:

create table table_name (
column_name type column_constraint,
table_constraint table_constraint
) inherits existing_table_name;

  示例:

create table account(
user_id serial primary key,
username varchar(50) unique not null,
password varchar(50) not null
);
主键约束

  主键是用于在表中唯一标识行的列或列组。从技术上讲,主键约束是非空约束和UNIQUE约束的组合。

  1.使用列级约束设置主键

create table "SysUser"(
"UserId" serial primary key,
"UserName" varchar(50),
"Pwd" varchar(50)
);
--说明:只能设置一列作为主键,主键默认名称为tablename_pkey。

  2.使用表级约束设置主键

create table "SysUser"(
"UserId" serial,
"UserName" varchar(50),
"Pwd" varchar(50),
constraint PK_SysUser primary key("UserId")
);
--说明:使用[表]级约束设置主键,可以设置一列或多列作为主键,主键默认名称为tablename_pkey,constraint PK_SysUser可省略。

  3.通过修改表结构设置主键

--语法:alter table table_name add [constraint constraint_name] primary key(column_1, column_2);
create table "SysUser"(
"UserId" serial,
"UserName" varchar(50),
"Pwd" varchar(50)
);
alter table "SysUser" add constraint PK_SysUser primary key("UserId");
--说明:通过修改表结构设置主键,可以设置一列或多列作为主键,可以指定主键名称。

  4.往已有表添加自增主键

--创建没有任何主键的表。
create table "Vendors" ("Name" varchar(255));
--往表添加数据
insert into "Vendors"("Name")values(''),(''),(''),('');
--查询
select * from "Vendors";

  数据输出

  现在,如果我们要添加一个名为id的自增主键到vendors表。

alter table "Vendors" add column "ID" serial primary key;

  数据输出

  5.删除主键

alter table table_name drop constraint pk_name;
外键约束

  外键约束维护子表和父表之间的引用完整性。

  1.使用列级约束设置外键

create table "SysUserInfo"(
"UserId" integer primary key references "SysUser"("UserId"),
"RealName" varchar(50),
"IdCard" varchar(50),
"Gender" smallint
);
--说明:外键默认名称为tablename_columnname_fkey

  2.使用表级约束设置外键

create table "SysUserInfo"(
"UserId" integer,
"RealName" varchar(50),
"IdCard" varchar(50),
"Gender" smallint,
primary key("UserId"),
foreign key("UserId") references "SysUser"("UserId")
);
--说明:外键默认名称为tablename_columnname_fkey

  3.通过修改表结构设置外键

--语法:alter table table_name add [constraint constraint_name] foreign key(column_1) references TableName(ColumnName);
create table "SysUserInfo"(
"UserId" integer,
"RealName" varchar(50),
"IdCard" varchar(50),
"Gender" smallint,
primary key("UserId")
);
alter table "SysUserInfo" add constraint SysUserInfo_UserId_fkey foreign key("UserId") references "SysUser"("UserId");
--说明:通过修改表结构设置外键,可以指定外键名称。

  4.删除外键约束(同删除其他约束一样,使用同一语法)

alter table table_name drop constraint fk_name;
唯一约束

  确保[列]或[列组]中的值在表中是唯一的。

  1.使用列级约束设置唯一约束

create table "Ha" (
"h1" varchar(50) unique,
"h2" varchar(50) unique,
"h3" varchar(50)
);
--生成2个列的唯一约束Ha_h1_key 和 Ha_h2_key

  2.使用表级约束设置唯一约束(注意以下两种方式的区别)

create table "Ha" (
"h1" varchar(50),
"h2" varchar(50),
"h3" varchar(50),
unique("h1","h2")
);
--将会生成1个列组的唯一约束Ha_h1_h2_key
create table "Ha" (
"h1" varchar(50),
"h2" varchar(50),
"h3" varchar(50),
unique("h1"),
unique("h2")
);
--将会生成2个列的唯一约束Ha_h1_key和Ha_h2_key

  3.通过修改表结构设置唯一约束

create table "Ha" (
"h1" varchar(50),
"h2" varchar(50),
"h3" varchar(50)
);
alter table "Ha" add constraint Ha_h1_h2_key unique("h1","h2")
--说明:将会生成1个列组的唯一约束Ha_h1_h2_key。如果想要2个列的唯一约束,需写两个alter table。

  4.测试列唯一约束和列组唯一约束

  列唯一约束

--首先创建一个具有唯一约束(列唯一约束)的表
create table "Ha" (
"h1" varchar(50) unique
);
insert into "Ha"("h1")values(''); --success
insert into "Ha"("h1")values(''); --error:重复键违反唯一约束"Ha_h1_key",键值"(h1)=(0)" 已经存在。
insert into "Ha"("h1")values(null);--success:可理解为null不等于任何一个值,因为它本身就是不确定的值,所以该条数据能添加成功。
insert into "Ha"("h1")values(null);--success:该条数据也能添加成功。

  列组唯一约束

--删除原表,然后创建一个具有唯一约束(列组唯一约束)的表
create table "Ha" (
"h1" varchar(50),
"h2" varchar(50),
unique("h1","h2")
);
insert into "Ha"("h1","h2")values('','');--success
insert into "Ha"("h1","h2")values('','');--success
insert into "Ha"("h1","h2")values('','');--error:重复键违反唯一约束"Ha_h1_h2_key",键值"(h1, h2)=(0, 1)" 已经存在。
insert into "Ha"("h1","h2")values(null,null);--success
insert into "Ha"("h1","h2")values(null,null);--success
检查约束

  该约束基于布尔表达式约束表中列的值。

  1.使用列级约束设置检查约束

create table "Ha" (income numeric CHECK(salary > 0));

  2.使用表级约束设置检查约束

create table "Ha" (
salary numeric,
CHECK(salary > 0)
);

  3.通过修改表结构设置检查约束

create table "Ha" (
salary numeric
);
alter table "Ha" add constraint Ha_salary_check check(salary > 0);

PostgreSQL创建表及约束的更多相关文章

  1. [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图

    目录 写在前面 文档与系列文章 表及其约束 存储过程 视图 总结 写在前面 由于一直在山西出差,有几天没更新博客了.昨晚回到家,将博客园最近三天更新的文章搜集了一下,花费了半天的时间,看了看,有些文章 ...

  2. Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间

    alter table userInfo add(msn varchar2(20)); 1.建表 create table userInfo ( id number(6), name varchar2 ...

  3. oracle之子查询、创建用户、创建表、约束

      子查询                                    子查询可以分为单行子查询和多行子查询   单行子查询           [1] 将一个查询的结果作为另外一个查询的条 ...

  4. POSTGRESQL 创建表结构、修改字段、导入导出数据库(支持CSV)

    这两个月经常使用postgresql,总结一些经常使用的语句: --创建表 CREATE TABLE customers ( customerid SERIAL primary key , compa ...

  5. postgresql创建表

    创建表时候有些方法:https://blog.csdn.net/qq_16605855/article/details/78905193

  6. sql基础语法-创建表和约束

    创建数据库表 USE SQL2016 IF OBJECT_ID('dbo.Employees','U') IS NOT NULL DROP TABLE dbo.Employees; Create TA ...

  7. Oracle的创建表和创建约束的Sql语句

    Oracle的创建表和创建约束的Sql语法 1.创建表的语句 ---1.创建模拟的数据表 --- --1.1.创建学生表Student create table Student( StuId NUMB ...

  8. Oracle创建表空间和表

    创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表.表空间是逻辑上的划分.方便管理的.数据表空间 (Tablesp ...

  9. Sql Server——运用代码创建数据库及约束

    在没有学习运用代码创建数据库.表和约束之前,我们只能用鼠标点击操作,这样看起来就不那么直观(高大上)了. 在写代码前要知道在哪里写和怎么运行: 点击新建查询,然后中间的白色空白地方就是写代码的地方了. ...

随机推荐

  1. CFGym 101194D 题解

    一.题目链接 http://codeforces.com/gym/101194/problem/D 二.题意 给定一个数字n和一个数字k,一个n个整数的序列,让你在里面找尽可能多的长度为k的符合“要求 ...

  2. 好久不见(致win7)

    7月8号,电脑上装了pgp,然后说让重启,重启之后蓝屏,自此,就一直蓝屏了 电脑装了双系统,工作时用centos,我不愿重装系统,怕centos受影响 网上说安装模式下可以卸载软件,可我在安全模式下, ...

  3. 清除MAC 可清除空间

    一.首先:查到了官方解释 https://support.apple.com/zh-cn/HT202867官方说 在 macOS Sierra 中,当您打开优化 Mac 储存空间时,会显示“可清除”内 ...

  4. python 黑魔法 ---上下文管理器(contextor)

    所谓上下文 计算机上下文(Context)对于我而言,一直是一个很抽象的名词.就像形而上一样,经常听见有人说,但是无法和现实认知世界相结合. 最直观的上下文,莫过于小学的语文课,经常会问联系上下文,推 ...

  5. gradle 刷新缓存

    gradle build --refresh-dependencies -x test

  6. eclipse怎么自定义工具栏

    1.点击透视图按钮---->右键---->Customize: 2.勾选或者去掉相关项目:

  7. ubuntu下的文件夹命名

    本文主要学习引用了http://dbua.iteye.com/blog/943945的方法.分享快乐,嘿嘿. 由于本人菜鸟一枚,所以ubuntu选的中文,但是安装后会发现文件夹名称,什么桌面啦,下载啦 ...

  8. Golang之指针(point)再探索

    先记录代码 package main import "fmt" /* 声明指针 *T 是指向类型T的值的指针变量的类型 */ func main() { //b := 255 // ...

  9. Ubuntu下U盘只读文件系统,图标上锁,提示无法修改

    资料来源于网络,自己总结 问题 Ubuntu下有时候插入U盘,发现不能修改其中的内容.例如不能新建文件和文件夹,不能向U盘中复制文件等,系统提示:只读文件系统. 原因大概是U盘的文件系统信息出错(保存 ...

  10. jquery.cookie 介绍 和 用法

    1.依赖jQuery库 2.浏览器兼容性情况 3.下载 官方github:https://github.com/carhartl/jquery-cookie 4.使用 创建一个整站cookie $.c ...