约束是对表的数据列强制执行的规则,这些用于防止将无效数据输入数据库,这样可以确保数据库中数据的准确性和可靠性。
以下是PostgreSQL中可用的常用约束。
NOT NULL Constraint - 确保值不能为空
UNIQUE Constraint - 确保值唯一
PRIMARY Key - 数据库唯一主键标识。
FOREIGN Key - 表外键
CHECK Constraint - CHECK约束确保列中的所有值都满足特定条件。
EXCLUSION Constraint - EXCLUDE约束确保运算符在指定的列或表达式上进行比较任何两行,则并非所有这些比较都将返回TRUE。
NOT NULL 约束
默认情况下,列可以包含NULL值。如果您不希望某列具有NULL值,则需要在此列上定义此类约束,以指定该列现在不允许NULL。
如,下面的PostgreSQL语句创建一个名为COMPANY1的新表,并添加五列,其中三列(ID,NAME和AGE)指定不接受NULL值-
CREATE TABLE COMPANY1( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
UNIQUE 约束
UNIQUE约束可防止两个记录在特定列中具有相同的值,例如,在COMPANY表中,您可能要防止两个或两个以上的人具有相同的年龄。
如,以下PostgreSQL语句创建一个名为COMPANY3的新表并添加五列,在这里,AGE列设置为UNIQUE,因此您不能拥有两个具有相同年龄的记录-
CREATE TABLE COMPANY3( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL UNIQUE, ADDRESS CHAR(50), SALARY REAL DEFAULT 50000.00 );
PRIMARY KEY 约束
PRIMARY KEY约束唯一地标识数据库表中的每个记录。可以有更多的UNIQUE列,但表中只有一个主键,主键是唯一的ID。
您已经在上面看到了很多示例,其中无涯教程创建了ID为主键的COMAPNY4表-
CREATE TABLE COMPANY4( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
FOREIGN KEY 约束
外键约束指定一列中的值必须与另一个表的某一行中出现的值匹配,之所以称为外键,是因为约束是外键。
如,以下PostgreSQL语句创建一个名为COMPANY5的新表并添加五列。
CREATE TABLE COMPANY6( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
如,以下PostgreSQL语句创建一个名为DEPARTMENT1的新表,该表将添加三列, EMP_ID列是外键,它引用表COMPANY6的ID字段。
CREATE TABLE DEPARTMENT1( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT references COMPANY6(ID) );
CHECK 约束
CHECK约束使条件可以检查输入到记录中的值,如果条件评估为false,则记录违反了约束,因此不会输入到表中。
如,以下PostgreSQL语句创建一个名为COMPANY5的新表并添加五列。 在这里,无涯教程添加一个带有SALARY的CHECK列,这样就不能将任何SALARY设置为零。
CREATE TABLE COMPANY5( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL CHECK(SALARY > 0) );
EXCLUSION 约束
排除约束条件确保使用指定的运算符在指定的列或表达式上比较任何两行时,这些运算符比较中的至少一个将返回false或null。
如,以下PostgreSQL语句创建一个名为COMPANY7的新表并添加五列。在这里,无涯教程添加一个EXCLUDE约束-
CREATE TABLE COMPANY7( ID INT PRIMARY KEY NOT NULL, NAME TEXT, AGE INT , ADDRESS CHAR(50), SALARY REAL, EXCLUDE USING gist (NAME WITH =, AGE WITH ) );
由于无涯教程强制了年龄必须相同,因此让无涯教程通过在表中插入记录来看到这一点-
INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 ); INSERT INTO COMPANY7 VALUES(3, 'Learnfk', 42, 'California', 20000.00 );
对于前两个INSERT语句,记录将添加到COMPANY7表中。对于第三条INSERT语句,显示以下错误-
ERROR: duplicate key value violates unique constraint "company7_pkey" DETAIL: Key (id)=(3) already exists.
Dropping 约束
要删除约束,您需要知道其名称。如果名称已知,很容易删除。否则,您需要找出系统生成的名称。 psql命令\d表名在这里可能会有所帮助。通用语法是-
ALTER TABLE table_name DROP CONSTRAINT some_name;
参考链接
https://www.learnfk.com/postgresql/postgresql-constraints.html
标签:约束条件,PostgreSQL,INT,PRIMARY,无涯,约束,KEY,NULL,ID From: https://blog.51cto.com/u_14033984/8957104