Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL数据表约束

MySQL数据表的常见约束小结

作者:白话Learning

在数据库设计中,约束(Constraints)是用于确保数据的完整性、准确性和一致性的规则,MySQL 提供了多种约束类型,帮助我们规范数据存储,本文给大家介绍了MySQL数据表的常见约束,需要的朋友可以参考下

在数据库设计中,约束(Constraints)是用于确保数据的完整性、准确性和一致性的规则。MySQL 提供了多种约束类型,帮助我们规范数据存储,并确保其符合预期的规则。常见的约束包括 主键(Primary Key)、外键(Foreign Key)、唯一约束(Unique)、非空约束(Not Null)、默认值(Default) 和 检查约束(Check)。

1. 主键约束(Primary Key)

作用:主键是用于唯一标识表中每一行数据的列。它不仅要求该列的值是唯一的,而且不能为空(即不允许 NULL)。每个表只能有一个主键。

特点:

示例:

CREATE TABLE employees (
    employee_id INT NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    PRIMARY KEY (employee_id)
);

在上述示例中,employee_id 是主键,它唯一标识每个员工记录,并且不能为 NULL。

2. 外键约束(Foreign Key)

作用:外键约束用于在两张表之间建立连接关系,确保一个表中的某列数据必须与另一表中的主键或唯一键数据相匹配。外键用于维护数据的参照完整性。

特点:

示例:

CREATE TABLE departments (
    department_id INT NOT NULL,
    department_name VARCHAR(50),
    PRIMARY KEY (department_id)
);

CREATE TABLE employees (
    employee_id INT NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    department_id INT,
    PRIMARY KEY (employee_id),
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

在这个例子中,employees 表中的 department_id 列是外键,指向 departments 表中的 department_id 列。这确保了每个员工必须隶属于某个部门。

3. 唯一约束(Unique)

作用:唯一约束确保某一列中的所有值都是唯一的,不允许重复。与主键不同的是,唯一约束允许列中存在 NULL 值,但多个 NULL 值可以存在。

特点:

示例:

CREATE TABLE users (
    user_id INT NOT NULL,
    username VARCHAR(50) UNIQUE,
    email VARCHAR(100) UNIQUE,
    PRIMARY KEY (user_id)
);

在上面的表中,username 和 email 列具有唯一约束,确保没有两个用户使用相同的用户名或邮箱。

4. 非空约束(Not Null)

作用:非空约束确保列中的数据不能为 NULL。当定义了 NOT NULL 约束时,插入数据时必须为该列提供一个有效的值。

特点:

示例

CREATE TABLE products (
    product_id INT NOT NULL,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2),
    PRIMARY KEY (product_id)
);

在该示例中,product_name 列不能为 NULL,每个产品必须有名称。

5. 默认值约束(Default)

作用:默认值约束用于在插入数据时为列指定一个默认值。当插入数据时没有提供该列的值时,MySQL 会使用默认值。

特点:

示例

CREATE TABLE orders (
    order_id INT NOT NULL,
    order_date DATE DEFAULT CURRENT_DATE,
    status VARCHAR(20) DEFAULT 'Pending',
    PRIMARY KEY (order_id)
);

在这个例子中,order_date 列的默认值是当前日期,而 status 列的默认值是 ‘Pending’。

6. 检查约束(Check)

作用:检查约束用于限制列中的数据必须满足某个条件。它可以确保插入的数据符合特定规则。此约束在 MySQL 8.0.16 及之后版本中得到了支持。

特点:

示例:

CREATE TABLE employees (
    employee_id INT NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    age INT,
    salary DECIMAL(10, 2),
    PRIMARY KEY (employee_id),
    CHECK (age >= 18),
    CHECK (salary >= 0)
);

在该表中,age 列的值必须大于等于 18,salary 列的值必须大于等于 0。

7. 逻辑与物理连接性

在数据库中,逻辑连接性和物理连接性是数据库设计中重要的概念:

逻辑连接性 指的是通过外键约束在表之间建立的关联关系。这些关联定义了数据如何在逻辑上被组织和约束。

物理连接性 侧重于数据库表在物理存储上的关联。例如,数据库可以使用索引来提高查询效率,尤其是在主键和唯一约束下,MySQL 会为这些列自动创建索引。

示例:

CREATE TABLE products (
    product_id INT NOT NULL,
    product_name VARCHAR(100),
    PRIMARY KEY (product_id)
);

CREATE TABLE order_items (
    order_item_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT,
    PRIMARY KEY (order_item_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

在上述示例中,order_items 表通过 product_id 外键与 products 表建立了逻辑上的连接。物理上,MySQL 可能会为 product_id 列创建索引,以加速查询。

8. 修改约束(ALTER TABLE)

如果在创建表后,需要修改表的约束,可以使用 ALTER TABLE 语句来添加、删除或修改约束。

示例:添加约束

ALTER TABLE employees
ADD CONSTRAINT chk_age CHECK (age >= 18 AND age <= 65);

示例:删除约束

ALTER TABLE employees
DROP CONSTRAINT chk_age;

9. 综合示例:创建完整的订单系统

结合前面的约束,以下是一个简单的订单系统设计示例,其中包含主键、外键、唯一约束、非空约束、默认值和检查约束:

CREATE TABLE customers (
    customer_id INT NOT NULL,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    phone VARCHAR(15),
    PRIMARY KEY (customer_id)
);

CREATE TABLE products (
    product_id INT NOT NULL,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    PRIMARY KEY (product_id)
);

CREATE TABLE orders (
    order_id INT NOT NULL,
    customer_id INT NOT NULL,
    order_date DATE DEFAULT CURRENT_DATE,
    status VARCHAR(20) DEFAULT 'Pending',
    PRIMARY KEY (order_id),
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

CREATE TABLE order_items (
    order_item_id INT NOT NULL,
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT CHECK (quantity > 0),
    PRIMARY KEY (order_item_id),
    FOREIGN KEY (order_id) REFERENCES orders(order_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

在这个系统中:

结语

通过合理使用 MySQL 中的约束,可以确保数据的完整性、正确性和一致性。在设计数据库时,约束不仅能防止错误数据的插入,还能提高数据查询和操作的效率。掌握这些约束的使用,将帮助我们在实际项目中构建更高质量的数据库系统。

以上就是MySQL数据表的常见约束小结的详细内容,更多关于MySQL数据表约束的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文