【PostgreSQL-9.6.3】约束

本文介绍了PostgreSQL中的五种约束:主键约束、外键约束、非空约束、唯一性约束和默认约束。详细解释了每种约束的作用及使用场景,并提供了SQL示例。

PostgreSQL中的约束有以下五种:主键约束、外键约束、非空约束、唯一性约束、默认约束。下面分别对这五种约束作说明。

一、主键约束(PrimaryKey Constraint

主键约束要求主键列中的数据非空且唯一,也就是说主键约束其实已经含有非空、唯一性两种约束。主键能够唯一标识数据表中的一

行记录,可以配合外键来定义不

同表之间的关系,并提高查询速度。主键分为两种类型:单字段主键和多字段联合主键。

1.单字段主键

主键由一个字段组成,SQL语句中可以有两种定义格式:


(1)在定义列的同时定义主键

column_name type primary key

如创建表test,定义id列为主键:

createtable test (

id int primary key,

first_name varchar2(10),

job varchar2(15)

);


(2)在定义完所有列后定义主键,即表级别定义主键

[constraintconstraint_name] primary key (column_name)

如创建表test,定义id列为主键:

createtable test (

id int,

first_name varchar2(10),

job varchar2(15),

primarykey (id)

);


2.多字段联合主键

主键由多个字段组合而成,SQL格式如下:

primarykey [column1,column2,column3…]

如创建表test,定义id,first_name列为主键:

createtable test (

id int,

first_name varchar2(10),

job varchar2(15),

primarykey (id,first_name)

);


二、外键约束(ForeignKey Constraint

外键用来连接两张表,可以是一列或者多列,同一张表中可以有一个或者多个外键。外键可以为空值,但只要不为空,它的值就是主

表里面的主键。主键所在的表称

为主表,或者父表;外键所在的表称为从表,或者子表。外键的创建语句格式为:

[constraint<外键名>]foreign key column1 [column2,column3…]

references<主表名>主键列1[主键列2,主键列3…]

如创建表test1,定义id1列为外键,参照test2表的主键列id2

createtable test (

id1 int,

first_name varchar2(10),

job varchar2(15),

constraintfk_test2_id2 foreign key (id1) references test2 (id2)

);


三、非空约束(NotNull Constraint

非空约束,顾名思义指字段的值不能为空,当向定义了非空约束的列插入空值时,数据库会报错。非空约束的定于语句为:

column_name type not null

如定义test表的id列为非空:

createtable test (

id int not null,

first_name varchar2(10),

job varchar2(15)

);


四、唯一性约束(UniqueConstraint

唯一性约束要求所在列的值不能重复,并且最多出现一个空值。唯一性约束可以指定一列或者多列的唯一性。

1.定义列的同时定义唯一性约束

column_name type unique

如创建表test,定义id列为唯一:

createtable test (

id int unique,

first_name varchar2(10),

job varchar2(15)

);


2.在定义完所有列以后指定唯一约束

[constraint<constraint_name>] unique (column_name)

如创建表test,定义id列为唯一:

createtable test (

id int ,

first_name varchar2(10),

job varchar2(15)

constraintU_id unique (id)

);


五、默认约束(DefaultConstraint

默认约束,即为指定列定义默认值,当向表中插入一条记录,即使被定义列没有被赋值,数据库也会给这个列赋予一个之前定义的默

认值。

column_name type default default_value

如创建表test,定义列id的默认值为00

如创建表test,定义id列为唯一:

createtable test (

id int default 00,

first_name varchar2(10),

job varchar2(15)

);

<think>嗯,用户这次明确要求详细解释PostgreSQL四个核心包的作用,看来是在部署或维护数据库时遇到了包选择的问题。虽然引用中提到了centos环境和安装建议,但用户更关注的是功能拆解而非安装步骤。 用户可能正在搭建PostgreSQL环境,需要精确知道每个包的用途来精简安装。考虑到之前引用提到了“服务器只需装server和contrib”,但用户特意追问所有包,说明可能有开发或管理需求。尤其问到postgresql-devel,这通常和二次开发相关——或许用户需要编译扩展或调试数据库? 从专业角度,这四个包需要分层说明:server是核心引擎,client是访问工具链,contrib是增值模块,devel是开发接口。要强调client不仅包含psql,还有pg_dump等关键工具;contrib的模块如pg_stat_statements对性能调优很重要;devel则关联到PL/Python这类扩展开发。 注意到用户引用的资料较旧(提到pgadmin3),实际pgAdmin4已是主流,但包作用本身变化不大。回答时要避免版本误导,重点描述通用功能。另外,引用中提到初始化步骤,但用户未追问,暂时不需展开。 用户能准确列出包名,说明有一定技术基础,解释时可以适当深入。比如devel包的头文件用途,或者contrib中具体模块案例(如uuid-ossp),但需保持表述简洁。最后补充典型场景的安装组合,帮助用户决策——毕竟知道“为什么装”比“装什么”更重要。 </think>以下是PostgreSQL核心软件包的详细功能解析(基于Red Hat/CentOS体系): ### 核心包作用详解 1. **postgresql-server** - **核心功能**:数据库引擎主程序 - 包含服务守护进程 `postmaster` - 提供 SQL 执行引擎/存储管理/事务处理 - 必需组件:`$ systemctl start postgresql` 2. **postgresql-client** - **核心功能**:客户端连接工具集 - 包含交互终端 `psql`:`$ psql -U user dbname` - 管理工具: - `pg_dump`(数据库备份) - `pg_restore`(数据恢复) - `createdb`/`dropdb`(库操作) - 开发依赖:应用程序连接数据库的驱动库 3. **postgresql-contrib** - **核心功能**:扩展功能模块 - 附加数据类型:如 `uuid-ossp` 生成UUID - 性能工具:`pg_stat_statements`(SQL性能分析) - 实用扩展: - `pgcrypto`(加密函数) - `hstore`(键值存储) - `earthdistance`(地理距离计算) 4. **postgresql-devel** - **核心功能**:开发编译支持 - C语言头文件:`postgres.h` 等 - 静态库:编译自定义函数必需 - 典型应用场景: - 开发 PostgreSQL 扩展 - 编译 PL/Python 等过程语言 - `$ gcc -I/usr/include/postgresql ...` ### 部署场景建议 | 场景 | 推荐安装包 | 示例命令 | |---------------|-------------------------------------|------------------------------| | 数据库服务器 | server + contrib | `yum install postgresql-server postgresql-contrib` | | 管理客户端 | client | `yum install postgresql-client` | | 应用开发环境 | client + devel | `yum install postgresql-client postgresql-devel` | | 完整开发环境 | client + server + contrib + devel | `yum install postgresql*` | > 关键提示:生产服务器建议至少安装 **server+contrib** 以启用性能监控模块[^1]。开发编译C语言扩展则必须包含 **devel** 包。 --- ### 相关问题 1. PostgreSQL的 `pg_stat_statements` 模块如何帮助优化查询性能? 2. 使用 `postgresql-devel` 开发自定义扩展的具体步骤是什么? 3. 在CentOS上安装PostgreSQL后,如何进行安全加固初始化? 4. PostgreSQL的客户端认证文件 `pg_hba.conf` 有哪些最佳实践配置? [^1]: PostgreSQL官方打包规范说明,详见:[PostgreSQL RPM Packaging Guidelines](https://www.postgresql.org/docs/current/rpm-packaging.html)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值