PostgreSQL 约束:类型及示例
什么是约束?
数据类型用于限制可以存储在表中的信息类型。但这种方法存在两个问题。
- 问题 1:数据类型强制执行的约束对于某些应用程序来说不够。例如,包含项目价格的列应只接受正值。但是,没有特定的数据类型只接受正数。
- 问题 2:您可能希望限制行/列数据中的信息,使其与其他列或行相关。例如,包含项目信息的表应为每个唯一列约束只保留一行。
要克服这些问题并定义这些规则,您可以在 PostgreSQL 中使用*约束*。简而言之,约束是您的数据必须遵循的规则。添加表约束可使数据库系统强制执行数据完整性。
因此,如果用户尝试将违反已定义约束的数据存储在列中,则应显示错误消息。
PostgreSQL 约束类型
让我们来看一下可以创建的各种 PostgreSQL 约束类型,以确保数据的正确性
- 唯一
- 非空
- 检查约束
- 主键
- 外键
- 执行约束
1) PostgreSQL 唯一约束
唯一约束有助于确保列或一组列约束中包含的数据是唯一的。
示例
CREATE TABLE Item( Item_no integer UNIQUE, Name text, );
2) 非空约束
非空约束定义列的值永远不能为 null。此类约束与创建检查约束非常相似。但是,PostgreSQL 创建的非空约束效率更高。此方法的问题在于您无法为非空约束指定明确的名称。
非空约束不是默认的 PostgreSQL 标准,不应用于可移植应用程序。它后来被添加到 PostgreSQL 中,以便与某些其他 DBMS 系统兼容。许多人使用它,因为它使在脚本文件中切换约束变得容易。
语法
CREATE TABLE Item ( product no integer NULL, Item_name text NULL, Itm_price numeric NULL );
3) PostgreSQL 检查约束
检查约束有助于指定某些列中的值必须是布尔表达式。
PostgreSQL 检查约束包含 CHECK 关键字,后跟括号中的表达式。Postgres 检查约束应包含要约束的列,否则它毫无意义。
语法
CREATE TABLE Item( Item_id INTEGER PRIMARY KEY, name VARCHAR(20), Item_price NUMERIC CHECK(price>0) );
示例
CREATE TABLE Emp( ID INTEGER primary key, First_name VARCHAR(20), Last_name VARCHAR(20), Gender CHAR(l) check(gender gender='M'), Salary INTEGER NOT NULL, Dept_Num INTEGER );
CREATE TABLE ITEM( Id INTEGER PRIMARY KEY, name VARCHAR(15), price numeric CHECK (price > 0) );
4) 主键约束
主键约束允许您将列或一组列用作表中行的唯一标识符。要定义主键约束,您声明的值必须既唯一又非空。这允许两个表定义接受相同的数据。
语法
Create Table Item( Item_no, integer PRIMARY KEY, Item_name text, Item_Price numeric );
示例 1
CREATE TABLE Employee( ID INTEGER PRIMARY KEY Fname VARCHAR(20), Lname VARCHAR(20), Gender CHAR(l), Salary INTEGER NOT NULL, Dept INTEGER, UNIQUE(FNAME, LNAME) );
示例 2
CREATE TABLE first( A1 INTEGER. A2 INTEGER. PRIMARY KEY (tl) ); Second way CREATE TABLE test( tl INTEGER PRIMARY KEY, t2 INTEGER. );
示例 3
CREATE TABLE Items ( Item_no integer UNIQUE NOT NULL, name text, price numeric CREATE TABLE Items ( Items_no no integer PRIMARY KEY, name text, price numeric
5) 外键约束
外键约束指定列或一组列中的值必须匹配另一个表中某些行中出现的值。这使您能够在两个关联表之间建立参照完整性。
假设您有一个表,该表存储不同产品的订单。您想确保该表包含存在的产品的订单。因此,在这里,您需要在订单表中定义一个引用产品表的外键约束。
语法
CREATE TABLE ( id INTEGER PRIMARY KEY. name VARCHAR(IO) >; CREATE TABLE testable Id INTEGER PRIMARY KEY read INTEGER REFERENCES (id) );
示例 2
CREATE TABLE Student ( Std_ID INTEGER primary key, First_name VARCHAR(20), Last_name VARCHAR(20), Gender CHAR(l), Steam, VARCHAR(20), Dept_NUM INTEGER REFERENCES Department );
6) 排斥约束
排斥约束有助于确保当使用指定运算符在指定列或表达式上比较任何两行时,至少有一个运算符比较会返回 null 或 false 值。添加此 PostgreSQL 约束将自动创建一个指定在约束声明中的类型的索引。
示例
例如,以下 PostgreSQL 语句创建了一个名为 School 的新表,并添加了五列。
CREATE TABLE SCHOOL6( STDID INT PRIMARY KEY NOT NULL, STDNAME TEXT NOT NULL, STDAGE INT NOT NULL, FEEDBACK CHAR(50), STANDARD INT NOT NULL,
例如,以下 PostgreSQL 语句创建了一个名为 Branch 的新表,并添加了三列。STD_ID 列是外键,它引用了 SCHOOL6 表的 ID 字段。
CREATE TABLE BRANCH ( BRANCHCODE INT PRIMARY KEY NOT NULL, BRAMCHNAME CHAR(50) NOT NULL, STD_ID INT references SCHOOL6(ID) );