MySQL中如何实现唯一约束?

MySQL中的唯一约束可以保证某列的值在整个表中是唯一的。它有两种实现方式:

  1. 在列定义时使用UNIQUE关键字:
sql
CREATE TABLE users (
    id INT,
    name VARCHAR(20) UNIQUE,
    age INT 
);

此时,name列的值必须是唯一的,如果插入name值相同的两条记录,后一条记录将报错。

  1. 在表定义完成后,使用ALTER TABLE添加UNIQUE约束:
sql
CREATE TABLE users (
    id INT,
    name VARCHAR(20),  
    age INT
);

ALTER TABLE users 
ADD UNIQUE (name); 

添加唯一约束后,同样不能有name值相同的两条记录。

UNIQUE约束与PRIMARY KEY约束的区别在于:

  1. PRIMARY KEY约束的列不允许为NULL,UNIQUE允许有NULL值。
  2. 一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE约束。
  3. 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值。

总结:唯一约束可以确保列的值在整张表中是唯一的,它增强了数据的完整性,是常用的约束类型之一。