在MySQL中,约束(Constraints)用于定义表中数据的规则。约束可确保数据库中的数据的准确性和可靠性,它们可以在创建表时定义(通过CREATE TABLE语句),也可以在表创建之后添加(通过ALTER TABLE语句)。以下是MySQL中常用的一些约束:
-
PRIMARY KEY 约束:
- 用于唯一标识表中的每行数据。
- 每个表只能有一个PRIMARY KEY。
- PRIMARY KEY约束的列不能包含NULL值。
- 一个PRIMARY KEY可以由一个或多个列组成,当多个列作为PRIMARY KEY时,它被称为复合键。
-
UNIQUE 约束:
- 保证了一个列或列组合中的所有值都是不同的,即在指定的列上不允许重复的值。
- 表中可以有多个UNIQUE约束。
- UNIQUE约束的列可以包含NULL值,但只能包含一个NULL值(因为NULL与任何其他值都不相等)。
-
NOT NULL 约束:
- 指定一个列不能存储NULL值。
- 用于保证列中必须有数据。
-
CHECK 约束:
- 用于限制列中的值必须满足一定条件(MySQL 8.0.16以后的版本支持)。
- 它可以保证某列的值在一个特定的范围。
-
FOREIGN KEY 约束:
- 用于在两个表之间建立连接。
- 用于保持父表和子表间数据的引用完整性。
- 当在子表中添加数据时,FOREIGN KEY约束将验证是否存在于父表的相应数据。
-
DEFAULT 约束:
- 用于在没有指定值的情况下为列提供默认值。
- 如果在插入行时未指定对应列的值,则会采用DEFAULT约束指定的值。
这些约束在数据库设计和日常维护中起着关键作用,确保数据满足特定的规则和业务逻辑要求。例如,以下SQL语句创建了一个带有各种约束的新表:
CREATE TABLE example_table (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
age INT NOT NULL CHECK (age >= 18),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
在这个example_table
表中:
id
列是PRIMARY KEY,并且具有自动增长的特性。username
列被设为NOT NULL且唯一。age
列被设为NOT NULL,且只允许存储大于或等于18的值。created_at
列如果不指定值,会默认为当前时间戳(CURRENT_TIMESTAMP)。