MySQL添加唯一约束

MySQL添加唯一约束

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的表,其中有两列分别叫做usernameemail,要给这两列同时添加唯一约束。

-- 创建表
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中添加唯一约束,并保证数据的唯一性。当插入重复数据时,会触发唯一性违规错误。唯一约束是数据库设计中的一个重要概念,能够提高数据的一致性和完整性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程