SQL 约束
SQL约束
SQL约束是应用于数据列或整个表的规则,用于限制可以插入表中的数据类型。当尝试在表上执行任何INSERT、UPDATE或DELETE操作时,关系数据库管理系统将检查该数据是否违反任何现有约束,如果定义的约束与数据操作之间存在冲突,则会中止该操作并返回错误信息。
我们可以定义列级约束或表级约束。列级约束只应用于单个列,而表级约束应用于整个表。
创建SQL约束
我们可以在创建表时使用CREATE TABLE语句创建表上的约束,或者在表创建后,可以使用ALTER TABLE语句来创建或删除表约束。
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 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键约束确保该列只接受唯一的值。下面是在ID列上创建UNIQUE键约束的示例。一旦创建了该约束,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)
);
查看 唯一键约束 的更多详细信息
主键约束
当应用于列时,主键约束确保列只接受唯一的值,并且表中可以有一个主键,但可以由多列组成。以下是在列ID上创建主键约束的示例。创建此约束后,列ID不能为空,并且它只接受唯一值。
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)
);
查看更多细节关于 主键约束
外键约束
外键约束与另一个表中的列进行映射,并唯一标识该表中的一行/记录。以下是一个示例,显示了在CUSTOMERS表中为列ID创建外键约束的语句。
CREATE TABLE ORDERS (
ID INT NOT NULL,
DATE DATETIME,
CUSTOMER_ID INT FOREIGN KEY REFERENCES CUSTOMERS(ID),
AMOUNT DECIMAL,
PRIMARY KEY (ID)
);
进一步详细了解 外键约束
CHECK值约束
应用于列时,CHECK值约束的作用类似于验证,用于检查输入到表的特定列中的数据的有效性。表并且唯一标识该表中的一行/记录。以下是在年龄列上创建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值约束 的详细信息
索引约束
索引约束是为了加快从数据库中检索数据而创建的。索引可以通过在表中使用单个或一组列来创建。一个表只能有一个主键,但可以有多个索引。根据要求,索引可以是唯一的或非唯一的。以下是在CUSTOMERS表的Age列上创建索引的示例。
CREATE INDEX idx_age ON CUSTOMERS ( AGE );
查看更多详细信息,请点击 INDEX约束
删除SQL约束
您可以使用 ALTER TABLE 命令和DROP CONSTRAINT选项来删除任何已定义的约束。例如,要从CUSTOMERS表中删除主键约束,可以使用以下命令。
ALTER TABLE CUSTOMERS DROP CONSTRAINT PRIMARY KEY;
一些RDBMS允许您禁用约束而不是永久从数据库中删除它们,您可能希望暂时禁用约束,然后稍后再启用它们。
数据完整性约束
数据完整性约束用于确保数据的整体准确性、完整性和一致性。现在,数据完整性也涉及与监管合规性(例如GDPR合规等)相关的数据安全性。
在关系数据库中,数据完整性通过参照完整性的概念来处理。有许多类型的完整性约束在参照完整性(RI)中起作用。这些约束包括主键、外键、唯一约束和其他上面提到的约束。