PostgreSQL 创建数据表

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: PostgreSQL 创建数据表

创建数据表的语句为: CREATE TABLE , 语法规则如下:

$ CREATE TABLE <表名>
(
  字段名1 数据类型 [列级别约束条件] [默认值], 
  字段名2 数据类型 [列级别约束条件] [默认值], 
  ……
);点击复制复制失败已复制


使用 CREATE TABLE 创建表时,必须指定一下信息:

  • 要创建的表名称,不区分大小写,不能使用SQL语言中的关键字,如:DROPALTERINSERT
  • 数据表中每一个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。


示例:

$ CREATE TABLE
(
  id  INT,
  name  VARCHAR(25),
  age INT
)点击复制复制失败已复制


约束条件

主键约束

主键又称 主码 ,是表中一列或多列的组合主键约束Primary Key Constraint要求主键列的数据唯一,并且不允许为空。主键能够唯一标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据可查询的速度。主键和记录直减的关系如同身份证和人之间的关系,他们之间是一一对应的。主键分为两种类型: 单字段主键多字段联合主键


单字段主键

主键由一个字段组成,SQL语句格式分为以下两种情况。


  1. 在定义列的同时指定主键。

语法规则如下:

字段名 数据类型 PRIMARY KEY点击复制复制失败已复制


示例:

$ CREATE TABLE
(
  id  INT PRIMARY KEY,
  name  VARCHAR(25),
  age INT
)点击复制复制失败已复制


  1. 在定义完所有列之后指定主键

语法规则如下:

[CONSTRAINT <约束名>] PRIMARY KEY [字段名]点击复制复制失败已复制


示例:

$ CREATE TABLE
(
  id  INT PRIMARY KEY,
  name  VARCHAR(25),
  age INT,
  PRIMARY KEY(id)
)点击复制复制失败已复制

注意: 两种写法仅仅是写法上的区别,不会有任何本质上的不同。


多字段联合主键

主键由多个字段联合组成,语法规则如下:

PRIMARY KEY [字段1,字段2,……,字段n]点击复制复制失败已复制


示例:

$ CREATE TABLE
(
  id  INT PRIMARY KEY,
  name  VARCHAR(25),
  school  VARCHAR(50),
  age INT,
  PRIMARY KEY(name,school)
)点击复制复制失败已复制


外键约束

外键用来在两个表的数据之间建立链接,可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是 参照完整性可以为空值,若不为空,则每一个外键值必须等于另一个表中主键的某个值。


外键: 表中的一个字段,可以不是本表的主键,但必须对应另外一个表的主键。外键的主要作用是保证数据引用的完整性。定义外键后,不允许删除在另一个表中具有关联关系的行。


主表(父表): 对于两个具有关联关系的表而言,相关联字段中主键所在的那个表就是主表


从表(字表): 对于两个具有关联关系的表而言,相关联字段中外键所在的那个表就是从表


语法规则:

[CONSTRAINT <外键名>] FOREIGN KEY 字段名1[,字段名2,……]
REFERENCES <主表名> 主键列1[,主键列2,……]点击复制复制失败已复制


外键名为定义的 外键约束的名称一个表中不能有相同名称的外键。 字段名表示从表需要添加外键约束的字段列。 主表名即被从表外键所依赖的表的名称 主键列表示主表中定义的主键字段或者字段组合。


示例:

先创建一个部门表:

$ CREATE TABLE department
(
  id  INT PRIMARY KEY,
  name  VARCHAR(25) NOT NULL,
  location  VARCHAR(50)
);点击复制复制失败已复制


再创建一个员工表:

$ CREATE TABLE employee
(
  id  INT PRIMARY KEY,
  name  VARCHAR(25) NOT NULL,
  department_id INT,
  salary FLOAT,
  CONSTRAINT fk_employee_department FOREIGN KEY(department_id) REFERENCES department(id)
);点击复制复制失败已复制


注意

子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配


非空约束

非空约束 (Not Null Constraint)指字段的值不能为空。


语法规则如下:

字段名 数据类型 NOT NULL点击复制复制失败已复制


示例:

$ CREATE TABLE
(
  id  INT PRIMARY KEY,
  name  VARCHAR(25) NOT NULL,
  school  VARCHAR(50),
  age INT
)点击复制复制失败已复制


唯一性约束

唯一性约束 (Unique Constraint)要求添加该约束的列字段的值唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几个列不出现重复值。


  1. 在定义完列之后直接指定唯一约束

语法规则如下:

字段名 数据类型 UNIQUE点击复制复制失败已复制


示例:

$ CREATE TABLE
(
  id  INT PRIMARY KEY,
  name  VARCHAR(25) UNIQUE,
  school  VARCHAR(50),
  age INT
)点击复制复制失败已复制


  1. 在定义完所有列之后直接指定唯一约束

语法规则如下:

[CONSTRAINT <约束名>] UNIQUE(<字段名>)点击复制复制失败已复制


示例:

$ CREATE TABLE
(
  id  INT PRIMARY KEY,
  name  VARCHAR(25),
  school  VARCHAR(50),
  age INT,
  CONSTRAINT STH UNIQUE(name)
)点击复制复制失败已复制


默认约束

默认约束 (Default Constraint)指定某列的默认值。


语法规则如下:

字段名 数据类型 DEFAULT 默认值点击复制复制失败已复制


示例:

$ CREATE TABLE
(
  id  INT PRIMARY KEY,
  name  VARCHAR(25),
  school  VARCHAR(50) DEFAULT '默认学校',
  age INT
)
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
SQL 关系型数据库 数据库
PostgreSQL数据表的导入导出
PostgreSQL数据表的导入导出
274 0
PostgreSQL数据表的导入导出
|
关系型数据库 分布式数据库 数据库
测试创建 PolarDB for PostgreSQL 数据库和连接数据库
测试创建 PolarDB for PostgreSQL 数据库和连接数据库
133 0
测试创建 PolarDB for PostgreSQL 数据库和连接数据库
|
关系型数据库 PostgreSQL
『PostgreSQL』PGSQL手动创建Sequence序列
📣读完这篇文章里你能收获到 - 在PostgreSQL中对Sequence的管理及使用
550 0
『PostgreSQL』PGSQL手动创建Sequence序列
|
存储 资源调度 Kubernetes
云原生 PostgreSQL - CrunchyData PGO 教程:创建、连接、删除 Postgres 集群
云原生 PostgreSQL - CrunchyData PGO 教程:创建、连接、删除 Postgres 集群
277 0
|
关系型数据库 MySQL PostgreSQL
PostgreSQL - 设置数据表编号初始值
PostgreSQL - 设置数据表编号初始值
101 0
|
监控 关系型数据库 PostgreSQL
PostgreSQL 12: 新增 pg_stat_progress_create_index 视图监控索引创建进度
PostgreSQL 12 版本之前,对PostgreSQL大表创建索引时是一个比较痛苦的过程,创建索引过程中无法得知索引创建进度,PostgreSQL 12 在运维监控功能方面得到增强,新增 pg_stat_progress_create_index 视图可以监控索引的创建进度,本文简单演示。
2052 0
LXJ
|
关系型数据库 数据库 数据安全/隐私保护
PostgreSQL创建只读用户
PostgreSQL创建只读用户
LXJ
272 0
|
Kubernetes 关系型数据库 PostgreSQL
如何在Kubernetes里给PostgreSQL创建secret
如何在Kubernetes里给PostgreSQL创建secret
115 0
如何在Kubernetes里给PostgreSQL创建secret
|
SQL 关系型数据库 MySQL
【RDS MySQL】为应用选择和创建最佳索引,加速数据读取
在工作中,由于SQL问题导致的数据库故障层出不穷,索引问题是SQL问题中常见的一种,例如:无索引,隐式转换,索引创建不合理。
311 0
【RDS MySQL】为应用选择和创建最佳索引,加速数据读取
|
存储 SQL 前端开发
PostgreSQL 创建B-Tree索引的过程
Postgres支持B-tree, hash, GiST, and GIN,也支持用户通过Gist自定义索引方法,比如时空数据库的R-Tree索引。
PostgreSQL 创建B-Tree索引的过程