首页 > 数据库 >无涯教程-PostgreSQL - 约束条件

无涯教程-PostgreSQL - 约束条件

时间:2023-12-24 21:31:48浏览次数:44  
标签:约束条件 PostgreSQL INT PRIMARY 无涯 约束 KEY NULL ID

约束是对表的数据列强制执行的规则,这些用于防止将无效数据输入数据库,这样可以确保数据库中数据的准确性和可靠性。

以下是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

相关文章

  • 无涯教程-PostgreSQL - Distinct语句
    PostgreSQLDISTINCT关键字与SELECT语句结合使用,可消除所有重复记录并仅提取唯一记录。Distinct-语法消除重复记录的DISTINCT关键字的基本语法如下-SELECTDISTINCTcolumn1,column2,.....columnNFROMtable_nameWHERE[condition]Distinct-示例考虑表 COMPANY ......
  • 无涯教程-PostgreSQL - With语句
    在PostgreSQL中,WITH查询提供了一种编写辅助语句以用于较大查询的方法,它有助于将复杂的大型查询分解为更易于阅读的更简单形式。WITH查询是CTE查询,在多次执行子查询时特别有用,代替临时表同样有用,它只计算一次聚合,并允许无涯教程在查询中按其名称引用它。在查询中使用它之前,必须......
  • 无涯教程-PostgreSQL - Order By语句
    PostgreSQLORDERBY子句用于根据一个或多个列以升序或降序对数据进行排序。OrderBy-语法ORDERBY子句的基本语法如下-SELECTcolumn-listFROMtable_name[WHEREcondition][ORDERBYcolumn1,column2,..columnN][ASC|DESC];您可以在ORDERBY子句中使用多个列......
  • 无涯教程-PostgreSQL - Limit语句
    PostgreSQLLIMIT子句用于限制SELECT语句返回的数量。LimitClause-语法带LIMIT子句的SELECT语句的基本语法如下-SELECTcolumn1,column2,columnNFROMtable_nameLIMIT[noofrows]以下是LIMIT子句与OFFSET子句一起使用时的语法-SELECTcolumn1,column2,columnN......
  • 无涯教程-PostgreSQL - 更新数据(Update)
    PostgreSQLUPDATE查询用于修改表中的现有记录,您可以将WHERE子句与UPDATE查询一起使用来更新选定的行,否则,将更新所有行。使用WHERE子句的UPDATE查询的基本语法如下-UPDATEtable_nameSETcolumn1=value1,column2=value2....,columnN=valueNWHERE[condition];您可以使用......
  • 无涯教程-PostgreSQL - AND&OR语句
    PostgreSQL的AND和OR运算符用于组合多个条件以缩小PostgreSQL语句中的选定数据。AND运算符AND运算符允许PostgreSQL语句的WHERE子句中存在多个条件,使用AND运算符时,当所有条件都为真时才通过。如,仅当condition1和condition2均为true时,[condition1]AND[condition2]才为tr......
  • 无涯教程-PostgreSQL - 表达式
    表达式(Expressions)是一个或多个值,运算符以及计算为一个值的PostgresSQL函数的组合。PostgreSQLEXPRESSIONS类似于公式,它们以查询语言编写,您还可以用于查询数据库以获取特定的数据集。考虑一下SELECT语句的基本语法,如下所示:SELECTcolumn1,column2,columnNFROMtable_na......
  • 无涯教程-PostgreSQL - 运算符
    运算符是保留字或字符,主要用于PostgreSQL语句的WHERE子句中以执行操作,如比较和算术运算。运算符用于指定PostgreSQL语句中的条件,并用作语句中多个条件的结合。算术运算符比较运算符逻辑运算符按位运算符PostgreSQL算术运算符假设变量a=2,变量b=3,则-运算符描述示例......
  • 无涯教程-PostgreSQL - 插入数据(Insert)
    PostgreSQLINSERTINTO语句允许将新行插入表中,一个查询可以一次插入一行或几行。INSERTINTO语句的基本语法如下-INSERTINTOTABLE_NAME(column1,column2,column3,...columnN)VALUES(value1,value2,value3,...valueN);在这里,columnN,column1,columnN是要在其中插入数......
  • 无涯教程-PostgreSQL - 删除表(Drop)
    PostgreSQLDROPTABLE语句用于删除表定义以及该表的所有关联数据,索引,规则,触发器和约束。DROPTABLE语句的基本语法如下-DROPTABLEtable_name;在上一章中,无涯教程已经创建了表DEPARTMENT和COMPANY。首先,验证这些表(使用\d列出表)-testdb-#\d这将产生以下输出-......