MySQL中的唯一约束可以保证某列的值在整个表中是唯一的。它有两种实现方式:
- 在列定义时使用UNIQUE关键字:
sql
CREATE TABLE users (
id INT,
name VARCHAR(20) UNIQUE,
age INT
);
此时,name列的值必须是唯一的,如果插入name值相同的两条记录,后一条记录将报错。
- 在表定义完成后,使用ALTER TABLE添加UNIQUE约束:
sql
CREATE TABLE users (
id INT,
name VARCHAR(20),
age INT
);
ALTER TABLE users
ADD UNIQUE (name);
添加唯一约束后,同样不能有name值相同的两条记录。
UNIQUE约束与PRIMARY KEY约束的区别在于:
- PRIMARY KEY约束的列不允许为NULL,UNIQUE允许有NULL值。
- 一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE约束。
- PRIMARY KEY约束的列值必须是唯一的,并且是记录的标识。
示例:
sql
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(20) UNIQUE,
age INT,
email VARCHAR(50) UNIQUE
);
INSERT INTO users VALUES(1, 'John', 30, 'john@example.com');
INSERT INTO users VALUES(2, 'May', 20, NULL); # 允许name列为NULL
INSERT INTO users VALUES(3, 'John', 40, 'john@example.org'); # 错误,重复name值
可以看到,name列和email列都有UNIQUE约束,所以name和email的值分别不能重复,但是name列允许有NULL值。
总结:唯一约束可以确保列的值在整张表中是唯一的,它增强了数据的完整性,是常用的约束类型之一。