MySQL之约束详细总结

发布于:2024-04-11 ⋅ 阅读:(146) ⋅ 点赞:(0)

概念

约束是作用于表中字段上的规则,用于限制存储在表中的数据

目的

保证数据库中数据的正确性、有效性和完整性

分类

  • NOT NULL:指定列的值不能为 NULL。
    CREATE TABLE students (
        student_id INT NOT NULL,
        name VARCHAR(50) NOT NULL
    );
    
  • UNIQUE:确保列中的所有值都是唯一的。
    CREATE TABLE users (
        username VARCHAR(50) UNIQUE,
        email VARCHAR(50) UNIQUE
    );
    
  • PRIMARY KEY:唯一标识表中的每一行,并确保该列中的值是唯一的且不为空。
    CREATE TABLE products (
        product_id INT PRIMARY KEY,
        name VARCHAR(50),
        price DECIMAL(10, 2)
    );
    
  • FOREIGN KEY:确保一个表中的数据完整性,指定一个列(或列组合)是另一个表的外键。
    CREATE TABLE orders (
        order_id INT PRIMARY KEY,
        product_id INT,
        FOREIGN KEY (product_id) REFERENCES products(product_id)
    );
    
  • CHECK:定义要在列中接受的值的范围。
    CREATE TABLE employees (
        employee_id INT,
        age INT CHECK (age >= 18),
        salary DECIMAL(10, 2) CHECK (salary >= 0)
    );
    
    
  • DEFAULT:指定列的默认值,如果插入行时没有提供该列的值,则使用默认值。
    CREATE TABLE students (
        student_id INT PRIMARY KEY,
        name VARCHAR(50),
        registration_date DATE DEFAULT CURRENT_DATE
    );
    
  • CASCADE:定义在引用表中更新或删除行时要采取的动作,以维护引用完整性。CASCADE 表示对引用行的任何更改都会反映在相关行上。
    CREATE TABLE orders (
        order_id INT PRIMARY KEY,
        product_id INT,
        FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE
    );
    
    
  • RESTRICT:指定在引用表中更新或删除行时要采取的动作,但拒绝对引用行的更改,除非不再有引用行。
    CREATE TABLE orders (
        order_id INT PRIMARY KEY,
        product_id INT,
        FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE RESTRICT
    );
    
  • SET NULL:定义在引用行被更新或删除时,将外键列设置为 NULL。
    CREATE TABLE orders (
        order_id INT PRIMARY KEY,
        product_id INT,
        FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE SET NULL
    );
    
  • NO ACTION:类似于 RESTRICT,但是在约束动作上没有实际行为。

    CREATE TABLE orders (
        order_id INT PRIMARY KEY,
        product_id INT,
        FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE NO ACTION
    );