Postgresql数据库 常用sql语句
Postgresql数据库 常用sql语句
1. 约束
1.1 主键约束
主键是用于在表中唯一标识行的列或列组。从技术上讲,主键约束是非空约束和UNIQUE约束的组合。
使用列级约束设置主键
- 使用列级约束设置主键, 只能设置一列作为主键,主键默认名称为tablename_pkey
CREATE TABLE IF NOT EXISTS users(
Id serial PRIMARY KEY,
Name VARCHAR(10) NOT NULL,
Code VARCHAR(20) NOT NULL,
CreatedAt timestamptz DEFAULT current_timestamp,
UpdatedAt timestamptz DEFAULT current_timestamp
);
使用表约束设置主键
- 使用表级约束设置主键,可以设置一列或多列作为主键,主键默认名称为tablename_pkey,
- "CONSTRAINT users_pkey" 可省略。
CREATE TABLE IF NOT EXISTS users(
Id serial,
Name VARCHAR(10) NOT NULL,
Code VARCHAR(20) NOT NULL,
CreatedAt timestamptz DEFAULT current_timestamp,
UpdatedAt timestamptz DEFAULT current_timestamp,
CONSTRAINT users_pkey PRIMARY KEY(Id),
CONSTRAINT users_code_key UNIQUE(Code)
);
通过修改表结构设置主键
- 通过修改表结构设置主键,可以设置一列或多列作为主键,可以指定主键名称。
- 语法:ALTER TABLE table_name ADD [CONSTRAINT constraint_name] PRIMARY KEY(column_1, column_2);
CREATE TABLE IF NOT EXISTS users(
Id serial,
Name VARCHAR(10) NOT NULL,
Code VARCHAR(20) NOT NULL,
CreatedAt timestamptz DEFAULT current_timestamp,
UpdatedAt timestamptz DEFAULT current_timestamp
);
ALTER TABLE users ADD CONSTRAINT users_pkey PRIMARY KEY (Id);
往已有表添加自增主键
- 通过修改表结构设置主键,可以设置一列或多列作为主键,可以指定主键名称。
- 语法:ALTER TABLE table_name ADD [CONSTRAINT constraint_name] PRIMARY KEY(column_1, column_2);
--1. 创建没有任何主键的表。
CREATE TABLE IF NOT EXISTS users(Name varchar(255));
--2. 往表添加数据
INSERT INTO users (Name) VALUES ('Amy'),('Alen'),('张三');
--3. 查询
select * from users;
数据输出:
name |
---|
Amy |
Alen |
张三 |
--4. 添加一个名为 id 的自增主键到表中
ALTER TABLE users ADD COLUMN Id SERIAL PRIMARY KEY;
--5. 查询
select * from users;
数据输出:
name | id |
---|---|
Amy | 1 |
Alen | 2 |
张三 | 3 |
删除主键约束
- 语法:ALTER TABLE table_name DROP CONSTRAINT constraint_name;
ALTER TABLE users DROP CONSTRAINT users_pkey;
1.2 外键约束
外键约束维护子表和父表之间的引用完整性。
使用列级约束设置外键
- 外键默认名称为 tablename_columnname_fkey
CREATE TABLE IF NOT EXISTS skills(
Id serial PRIMARY KEY,
Userid integer NOT NULL REFERENCES users(Id),
Name VARCHAR(10) NOT NULL,
CreatedAt timestamptz DEFAULT current_timestamp,
UpdatedAt timestamptz DEFAULT current_timestamp
);
使用表约束设置外键
- 外键默认名称为 tablename_columnname_fkey
- "CONSTRAINT skills_Userid_fkey" 可省略。
CREATE TABLE IF NOT EXISTS skills(
Id serial,
Userid integer NOT NULL,
Name VARCHAR(10) NOT NULL,
CreatedAt timestamptz DEFAULT current_timestamp,
UpdatedAt timestamptz DEFAULT current_timestamp,
CONSTRAINT skills_pkey PRIMARY KEY(Id),
CONSTRAINT skills_Userid_fkey FOREIGN KEY(Userid) REFERENCES Users(Id)
);
通过修改表结构设置外键
- 通过修改表结构设置外键,可以指定外键名称。
- 语法:ALTER TABLE table_name_1 ADD [CONSTRAINT constraint_name] FOREIGN KEY(column_1) REFERENCES table_name_2(column_2);
CREATE TABLE IF NOT EXISTS skills(
Id serial,
Userid integer NOT NULL,
Name VARCHAR(10) NOT NULL,
CreatedAt timestamptz DEFAULT current_timestamp,
UpdatedAt timestamptz DEFAULT current_timestamp
);
ALTER TABLE skills ADD CONSTRAINT skills_Userid_fkey FOREIGN KEY(Userid) REFERENCES Users(Id);
删除外键约束
- 同删除其他约束一样,使用同一语法
- 语法:ALTER TABLE table_name DROP CONSTRAINT constraint_name;
ALTER TABLE skills DROP CONSTRAINT skills_Userid_fkey;
1.3 唯一约束
确保列或列组中的值在表中是唯一的。
使用列级约束设置唯一约束
- 生成2个列的唯一约束users_Code_key 和 users_Ucode_key
- 唯一约束默认名称为tablename_columnname_pkey
CREATE TABLE IF NOT EXISTS users(
Id serial PRIMARY KEY,
Name VARCHAR(10) NOT NULL,
Code VARCHAR(20) NOT NULL UNIQUE,
Ucode VARCHAR(20) NOT NULL UNIQUE,
CreatedAt timestamptz DEFAULT current_timestamp,
UpdatedAt timestamptz DEFAULT current_timestamp
);
使用表级约束设置唯一约束
- 注意以下两种方式的区别
- "CONSTRAINT users_Code_key" 可以省略
- 将会生成1个列组的唯一约束users_Code_Ucode_key
CREATE TABLE IF NOT EXISTS users(
Id serial PRIMARY KEY,
Name VARCHAR(10) NOT NULL,
Code VARCHAR(20) NOT NULL,
Ucode VARCHAR(20) NOT NULL,
CreatedAt timestamptz DEFAULT current_timestamp,
UpdatedAt timestamptz DEFAULT current_timestamp,
CONSTRAINT users_Code_Ucode_key UNIQUE(Code,Ucode)
);
- 将会生成2个列的唯一约束users_Code_key和users_Ucode_key
CREATE TABLE IF NOT EXISTS users(
Id serial PRIMARY KEY,
Name VARCHAR(10) NOT NULL,
Code VARCHAR(20) NOT NULL,
Ucode VARCHAR(20) NOT NULL,
CreatedAt timestamptz DEFAULT current_timestamp,
UpdatedAt timestamptz DEFAULT current_timestamp,
CONSTRAINT users_Code_key UNIQUE(Code),
CONSTRAINT users_Ucode_key UNIQUE(Ucode)
);
通过修改表结构设置唯一约束
- 将会生成1个列组的唯一约束users_Code_Ucode_key。如果想要2个列的唯一约束,需写两个alter table。
CREATE TABLE IF NOT EXISTS users(
Id serial PRIMARY KEY,
Name VARCHAR(10) NOT NULL,
Code VARCHAR(20) NOT NULL,
Ucode VARCHAR(20) NOT NULL,
CreatedAt timestamptz DEFAULT current_timestamp,
UpdatedAt timestamptz DEFAULT current_timestamp
);
ALTER TABLE users ADD CONSTRAINT users_Code_Ucode_key UNIQUE (Code, Ucode);
删除唯一约束
- 同删除其他约束一样,使用同一语法
- 语法:ALTER TABLE table_name DROP CONSTRAINT constraint_name;
ALTER TABLE users DROP CONSTRAINT users_Code_Ucode_key;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律