在数据库设计中,约束是用于限制表中数据的取值范围和数据完整性的一种机制,通过设置约束,可以确保数据的一致性、有效性和可靠性,本文将详细介绍如何在SQL中设置各种约束。
非空约束(NOT NULL)
非空约束用于确保某列的值不能为空,在创建表时,可以为某列指定非空约束,也可以在表创建后添加非空约束。
1、创建表时设置非空约束:
CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, department VARCHAR(50) );
2、修改表结构添加非空约束:
ALTER TABLE employees ADD CONSTRAINT chk_name CHECK (name <> '');
唯一约束(UNIQUE)
唯一约束用于确保某列的值在整个表中是唯一的,在创建表时,可以为某列指定唯一约束,也可以在表创建后添加唯一约束。
1、创建表时设置唯一约束:
CREATE TABLE employees ( id INT PRIMARY KEY, email VARCHAR(50) UNIQUE, age INT, department VARCHAR(50) );
2、修改表结构添加唯一约束:
ALTER TABLE employees ADD CONSTRAINT chk_email UNIQUE (email);
主键约束(PRIMARY KEY)
主键约束用于确保某列的值在整个表中是唯一且不为空,在创建表时,可以为某列指定主键约束,也可以在表创建后添加主键约束。
1、创建表时设置主键约束:
CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, department VARCHAR(50) );
2、修改表结构添加主键约束:
ALTER TABLE employees ADD CONSTRAINT chk_id PRIMARY KEY (id);
外键约束(FOREIGN KEY)
外键约束用于确保某列的值与另一个表中的主键值相匹配,在创建表时,可以为某列指定外键约束,也可以在表创建后添加外键约束。
1、创建表时设置外键约束:
CREATE TABLE departments ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, manager_id INT, CONSTRAINT fk_manager FOREIGN KEY (manager_id) REFERENCES employees(id) );
2、修改表结构添加外键约束:
ALTER TABLE departments ADD CONSTRAINT fk_manager FOREIGN KEY (manager_id) REFERENCES employees(id);
检查约束(CHECK)
检查约束用于确保某列的值满足指定的条件,在创建表时,可以为某列指定检查约束,也可以在表创建后添加检查约束。
1、创建表时设置检查约束:
CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, department VARCHAR(50), CONSTRAINT chk_age CHECK (age >= 18 AND age <= 65) );
2、修改表结构添加检查约束:
ALTER TABLE employees ADD CONSTRAINT chk_age CHECK (age >= 18 AND age <= 65);
默认约束(DEFAULT)
默认约束用于为某列指定一个默认值,在创建表时,可以为某列指定默认约束,也可以在表创建后添加默认约束。
1、创建表时设置默认约束:
CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, department VARCHAR(50), hire_date DATE NOT NULL DEFAULT CURRENT_DATE, -默认值为当前日期和时间 CONSTRAINT chk_hire_date CHECK (hire_date <= CURDATE()) -确保入职日期不早于当前日期和时间,因为默认值为当前日期和时间,所以不需要再添加检查约束了,如果需要自定义默认值,可以使用函数或表达式,hire_date NOT NULL DEFAULT NOW() + INTERVAL FLOOR(RAND() * (365)) YEAR,这将为员工分配一个随机的入职年份,这种方法可能会导致一些员工在同一天入职,因此需要根据实际情况进行调整。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/186710.html