MySQL添加唯一约束
在数据库设计中,常常需要保证某些列的唯一性,也就是不允许出现重复的数据。为了实现这个目的,可以在MySQL中使用唯一约束。本文将详细介绍如何在MySQL中添加唯一约束,并给出5个示例代码及运行结果。
1. 什么是唯一约束
唯一约束是指在数据库表中,对于某一或多个列的取值不能重复出现。也就是说,如果已经存在某个记录具有某列的某个取值,那么再次插入具有相同取值的记录时,会触发唯一性违规错误。
2. 添加唯一约束的语法
下面是在MySQL中添加唯一约束的语法:
ALTER TABLE 表名 ADD UNIQUE(列名);
3. 示例代码及运行结果
示例1:
假设有一个名为students
的表,其中有一列叫做student_id
,现在要给student_id
列添加唯一约束。
-- 创建表
CREATE TABLE students (
student_id INT,
name VARCHAR(100),
age INT
);
-- 添加唯一约束
ALTER TABLE students ADD UNIQUE(student_id);
插入记录的代码和运行结果如下:
-- 插入记录
INSERT INTO students (student_id, name, age) VALUES (1, 'Alice', 20);
INSERT INTO students (student_id, name, age) VALUES (2, 'Bob', 21);
INSERT INTO students (student_id, name, age) VALUES (3, 'Alice', 22); -- 违反唯一性约束,会报错
运行结果:
ERROR 1062 (23000): Duplicate entry '1' for key 'student_id'
示例2:
现在假设有一个名为users
的表,其中有两列分别叫做username
和email
,要给这两列同时添加唯一约束。
-- 创建表
CREATE TABLE users (
id INT,
username VARCHAR(100),
email VARCHAR(100)
);
-- 添加唯一约束
ALTER TABLE users ADD UNIQUE(username, email);
插入记录的代码和运行结果如下:
-- 插入记录
INSERT INTO users (id, username, email) VALUES (1, 'alice', 'alice@example.com');
INSERT INTO users (id, username, email) VALUES (2, 'bob', 'bob@example.com');
INSERT INTO users (id, username, email) VALUES (3, 'alice', 'alice@example.com'); -- 违反唯一性约束,会报错
运行结果:
ERROR 1062 (23000): Duplicate entry 'alice@example.com' for key 'username'
示例3:
唯一约束也可以用在已经存在的表中。例如,假设已经存在一个名为products
的表,其中有一列叫做product_code
,要给product_code
列添加唯一约束。
-- 添加唯一约束
ALTER TABLE products ADD UNIQUE(product_code);
插入记录的代码和运行结果如下:
-- 插入记录
INSERT INTO products (product_code, name, price) VALUES ('P001', 'Product 1', 10.99);
INSERT INTO products (product_code, name, price) VALUES ('P002', 'Product 2', 20.99);
INSERT INTO products (product_code, name, price) VALUES ('P001', 'Product 3', 30.99); -- 违反唯一性约束,会报错
运行结果:
ERROR 1062 (23000): Duplicate entry 'P001' for key 'product_code'
示例4:
在创建表时也可以直接指定某列的唯一约束。
-- 创建表并添加唯一约束
CREATE TABLE orders (
order_id INT,
order_number VARCHAR(100) UNIQUE,
order_date DATE
);
插入记录的代码和运行结果如下:
-- 插入记录
INSERT INTO orders (order_id, order_number, order_date) VALUES (1, 'ORD001', '2022-01-01');
INSERT INTO orders (order_id, order_number, order_date) VALUES (2, 'ORD002', '2022-01-02');
INSERT INTO orders (order_id, order_number, order_date) VALUES (3, 'ORD001', '2022-01-03'); -- 违反唯一性约束,会报错
运行结果:
ERROR 1062 (23000): Duplicate entry 'ORD001' for key 'order_number'
示例5:
除了给列添加唯一约束,还可以给多个列同时添加唯一约束。
-- 创建表并添加唯一约束
CREATE TABLE invoices (
invoice_id INT,
customer_id INT,
invoice_number VARCHAR(100),
UNIQUE(customer_id, invoice_number)
);
插入记录的代码和运行结果如下:
-- 插入记录
INSERT INTO invoices (invoice_id, customer_id, invoice_number) VALUES (1, 1, 'INV001');
INSERT INTO invoices (invoice_id, customer_id, invoice_number) VALUES (2, 2, 'INV002');
INSERT INTO invoices (invoice_id, customer_id, invoice_number) VALUES (3, 1, 'INV001'); -- 违反唯一性约束,会报错
运行结果:
ERROR 1062 (23000): Duplicate entry '1-INV001' for key 'customer_id'
结论
通过以上示例代码及运行结果,我们可以看到如何在MySQL中添加唯一约束,并保证数据的唯一性。当插入重复数据时,会触发唯一性违规错误。唯一约束是数据库设计中的一个重要概念,能够提高数据的一致性和完整性。