概念
约束是作用于表中字段上的规则,用于限制存储在表中的数据
目的
保证数据库中数据的正确性、有效性和完整性
分类
- 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 );