目录
数据库约束是一种用于确保数据库中数据完整性和一致性的规则或条件。这些约束可以应用于表、列或整个数据库,以确保数据的正确性和可靠性。主要的约束类型有以下:
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。确保列中的数据是唯一的,但与主键约束不同的是,唯一约束允许空值
- DEFAULT - 规定没有给列赋值时的默认值。 定义列的默认值,如果插入行时未提供该列的值,则将使用默认值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。用于限制列中数据的范围,例如,确保年龄列中的值大于等于18。
1. NULL约束
创建表时,可以指定某列不为空。比如我们想要创建一个学生表,学生表的id属性代表学生的在数据库中的编号,我们想要指定id是不可以为空的。这样我们就可以维塔加上一个非空约束。
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT,
name VARCHAR(20),
qq_mail VARCHAR(20)
);
2. 唯一(UNIQUE)约束
还是上面的例子,我们想要学生的学号(sn)为不重复的,此时就可以为数据库的id列加上一个UNIQUE约束。
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20) ,
qq_mail VARCHAR(20)
);
3. 默认值(DEFAULT)约束
比如我们想要再插入一条学生数据的时候,想要name列暂时不添加,设定一个默认值,设定默认值为unknown。
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);
4. 主键约束
这个约束就是非空加上UNIQUE。
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL PRIMARY KEY,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);
对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大 值+1。
-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment,
5. 外键约束
外键约束在数据库设计中扮演着至关重要的角色,它不仅确保了数据的完整性和一致性,还提供了建立表之间关系的有效方式。他的基本使用语法是:foreign key (字段名) references 主表(列)。
案例:
创建班级表classes,id为主键:(有使用MySQL关键字作为字段时,需要使用``来标识)
-- 创建班级表,有使用MySQL关键字作为字段时,需要使用``来标识
DROP TABLE IF EXISTS classes;
CREATE TABLE classes (
id INT PRIMARY KEY auto_increment,
name VARCHAR(20),
`desc` VARCHAR(100)
);
创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键, classes_id为外键,关联班级表id:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);
6. CHECK约束
CHECK约束是一种用于在插入或更新数据时验证特定条件的约束。它允许你指定一个条件,当条件为真时才允许插入或更新数据。这个条件可以是一个简单的逻辑表达式,也可以是一个复杂的函数或子查询。
drop table if exists test_user;
create table test_user (
id
int,
name varchar(20),
sex varchar(1),
check (sex ='男' or sex='女')
);