SQL - 约束



SQL 约束

SQL 约束是应用于数据列或整个表以限制可以进入表的的数据类型的规则。当您尝试对表执行任何 INSERT、UPDATE 或 DELETE 操作时,RDBMS 将检查该数据是否违反任何现有约束,如果定义的约束和数据操作之间存在任何违反,则它将中止操作并返回错误。

我们可以定义列级或表级约束。列级约束仅应用于一列,而表级约束应用于整个表。

SQL 创建约束

我们可以在创建表时使用 CREATE TABLE 语句在表上创建约束,或者在创建表后,我们可以使用 ALTER TABLE 语句创建或删除表约束。

CREATE TABLE table_name (
   column1 datatype constraint,
   column2 datatype constraint,
   ....
   columnN datatype constraint
);

不同的 RDBMS 允许定义不同的约束。本教程将讨论 MySQL 中可用的 7 个最重要的约束。

NOT NULL 约束

当应用于列时,NOT NULL 约束确保列不能具有 NULL 值。以下是创建 NOT NULL 约束的示例

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2)
);

查看有关 NOT NULL 约束 的更多详细信息

UNIQUE 键约束

当应用于列时,UNIQUE Key 约束确保列仅接受唯一值。以下是为 ID 列创建 UNIQUE Key 约束的示例。创建此约束后,ID 列不能为 null,并且它将仅接受唯一值。

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL UNIQUE,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2)
);

查看有关 唯一键约束 的更多详细信息

DEFAULT 值约束

当应用于列时,DEFAULT 值约束在未指定值时为列提供默认值。以下是为 NAME 列创建 DEFAULT 约束的示例。创建此约束后,如果 NAME 未设置值,则 NAME 列将设置为“不可用”值。

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL UNIQUE,
   NAME VARCHAR (20) DEFAULT 'Not Available',
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2)
);

查看有关 DEFAULT 值约束 的更多详细信息

PRIMARY 键约束

当应用于列时,PRIMARY Key 约束确保列仅接受唯一值,并且表上只能有一个 PRIMARY Key,但多个列可以构成一个 PRIMARY Key。以下是为 ID 列创建 PRIMARY Key 约束的示例。创建此约束后,ID 列不能为 null,并且它将仅接受唯一值。

CREATE TABLE CUSTOMERS(
   ID          INT NOT NULL,
   NAME        VARCHAR (20) NOT NULL,
   AGE         INT NOT NULL,
   ADDRESS     CHAR (25),
   SALARY      DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

查看有关 PRIMARY Key 约束 的更多详细信息

FOREIGN 键约束

FOREIGN Key 约束映射到另一个表中的列,并唯一标识该表中的行/记录。以下是在 CUSTOMERS 表中创建外键约束的示例,如下面的语句所示 -

CREATE TABLE ORDERS (
   ID INT NOT NULL,
   DATE DATETIME,
   CUSTOMER_ID INT FOREIGN KEY REFERENCES CUSTOMERS(ID),
   AMOUNT DECIMAL,
   PRIMARY KEY (ID)
);

查看有关 FOREIGN Key 约束 的更多详细信息

CHECK 值约束

当应用于列时,CHECK 值约束就像一个验证,它用于检查输入到表特定列的数据的有效性。表并唯一标识该表中的行/记录。以下是在 AGE 列上创建 CHECK 验证的示例,如果其值低于 18,则不会被接受。

CREATE TABLE CUSTOMERS(
   ID          INT NOT NULL,
   NAME        VARCHAR (20) NOT NULL,
   AGE         INT NOT NULL CHECK(AGE>=18),
   ADDRESS     CHAR (25),
   SALARY      DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

查看有关 CHECK 值约束 的更多详细信息

INDEX 约束

创建 INDEX 约束是为了加快从数据库中检索数据。可以使用表中的一列或一组列创建索引。表可以有一个 PRIMARY Key,但可以有多个 INDEXES。根据需要,索引可以是唯一的或非唯一的。以下是为 CUSTOMERS 表的 Age 列创建索引的示例。

CREATE INDEX idx_age ON CUSTOMERS ( AGE );

查看有关 INDEX 约束 的更多详细信息

删除 SQL 约束

可以使用带有 DROP CONSTRAINT 选项的 ALTER TABLE 命令删除您定义的任何约束。例如,要从 CUSTOMERS 表中删除主键约束,可以使用以下命令。

ALTER TABLE CUSTOMERS DROP CONSTRAINT PRIMARY KEY;

某些 RDBMS 允许您禁用约束而不是永久地从数据库中删除它们,您可能希望临时禁用约束,然后稍后重新启用它们。

数据完整性约束

数据完整性约束用于确保数据的整体准确性、完整性和一致性。如今,数据完整性还指数据在监管合规性(例如 GDPR 合规性等)方面的安全性。

关系数据库通过参照完整性的概念来处理数据完整性。有许多类型的完整性约束在参照完整性 (RI) 中发挥作用。这些约束包括主键、外键、唯一约束和其他上面提到的约束。

广告