Sql 简明教程
SQL - Constraints
SQL Constraints
SQL 约束是应用于数据列或完整表的规则,用于限制可以添加到表中的数据的类型。当您尝试对表执行任何 INSERT、UPDATE 或 DELETE 操作时,RDBMS 会检查该数据是否违反任何现有约束,如果定义的约束与数据操作之间有任何违反,则会中止操作并返回错误。
我们可以定义列级别或表级别约束。列级别约束仅应用于一列,而表级别约束应用于整个表。
SQL Create Constraints
我们可以在使用 CREATE TABLE 语句创建表时定义表上的约束,或者在创建表之后,我们可以使用 ALTER TABLE 语句来创建或删除表约束。
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
....
columnN datatype constraint
);
不同的 RDBMS 允许定义不同的约束。本教程将讨论 MySQL 中 7 个最重要约束。
NOT NULL Constraint
当应用于列时,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 Constraint 上查看详细信息
UNIQUE Key Constraint
当应用于列时,UNIQUE Key 约束确保列仅接受 UNIQUE 值。以下是针对列 ID 创建 UNIQUE Key 约束的示例。此约束创建后,ID 列不能为 null,并且它只会接受 UNIQUE 值。
CREATE TABLE CUSTOMERS (
ID INT NOT NULL UNIQUE,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2)
);
在 Unique Key Constraint 上查看详细信息
DEFAULT Value Constraint
当应用于列时,DEFAULT Value 约束在未指定时为列提供一个默认值。以下是针对列 NAME 创建 DEFAULT 约束的示例。此约束创建后,如果 NAME 未设置为某个值,NAME 列将设置为 "Not Available" 值。
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 Value Constraint 上查看详细信息
PRIMARY Key Constraint
当应用于列时,PRIMARY Key 约束确保列仅接收 UNIQUE 值,表上可能只有一个 PRIMARY Key,但多个列可以构成一个 PRIMARY Key。以下是针对列 ID 创建 PRIMARY Key 约束的示例。此约束创建后,列 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)
);
在 PRIMARY Key Constraint 上查看详细信息
FOREIGN Key Constraint
FOREIGN Key 约束与另一表中的一列映射,并唯一标识该表中一行/记录。以下是一个示例,用于针对 CUSTOMERS 表中列 ID 创建外键约束,如下面的语句所示 −
CREATE TABLE ORDERS (
ID INT NOT NULL,
DATE DATETIME,
CUSTOMER_ID INT FOREIGN KEY REFERENCES CUSTOMERS(ID),
AMOUNT DECIMAL,
PRIMARY KEY (ID)
);
有关 FOREIGN Key Constraint 的详细信息,请查看
CHECK Value Constraint
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 Value Constraint 的详细信息,请查看
INDEX Constraint
创建 INDEX 约束是为了加快从数据库中检索数据。可以通过使用数据表中的一列或若干列来创建索引。表可以具有一个 PRIMARY 键,但可以具有多个 INDEX。索引可以根据要求是唯一索引或非唯一索引。以下举例说明在 CUSTOMERS 表的 Age 列上创建索引。
CREATE INDEX idx_age ON CUSTOMERS ( AGE );
有关 INDEX Constraint 的详细信息,请查看