目录
数据库完整性约束作用
确保用户输入的数据正确保存到数据库中,保证数据完整性。实现方式通过在创建表时添加约束来实现数据完整性。
完整性分类
- 实体完整性
- 域完整性
- 引用完整性
实体完整性
概念:表中的每一行代表一个实体,实体完整性用于标识每行数据不重复。
约束类型:主键约束 (PRIMARY KEY)、唯一约束 (UNIQUE)、自动增长列 (AUTO_INCREMENT)
主键约束 (PRIMARY KEY)
特点:数据唯一且不能为NULL
添加方式:
方式一:
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(50)
);
方式二(支持联合主键):
CREATE TABLE student(
id INT,
name VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE student(
classid INT,
stuid INT,
name VARCHAR(50),
PRIMARY KEY(classid, stuid)
);
方式三:
CREATE TABLE student(
id INT,
name VARCHAR(50)
);
ALTER TABLE student ADD PRIMARY KEY (id);
唯一约束 (UNIQUE)
特点:数据不能重复
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(50) UNIQUE
);
自动增长列 (AUTO_INCREMENT)
用途:为主键自动生成递增值(仅限整数类型)
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
);
INSERT INTO student(name) VALUES('tom');
域完整性
作用:限制单元格数据的正确性(不与其他单元格比较)
约束类型:数据类型约束、非空约束 (NOT NULL)、默认值约束 (DEFAULT)、CHECK约束(MySQL不支持)
非空约束
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
sex VARCHAR(10)
);
INSERT INTO student VALUES(1,'tom',NULL);
默认值约束
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
sex VARCHAR(10) DEFAULT '男'
);
INSERT INTO student VALUES(1,'tom','女');
INSERT INTO student VALUES(2,'jerry',DEFAULT);
引用完整性(外键约束)
作用:确保表间关系的一致性
CREATE TABLE student(
sid INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
sex VARCHAR(10) DEFAULT '男'
);
CREATE TABLE score(
id INT,
score INT,
sid INT, -- 外键类型必须与主键一致
CONSTRAINT fk_score_sid FOREIGN KEY (sid) REFERENCES student(id)
);
第二种添加方式:
ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);
表间关系
一对一关系
示例:人员表(t_person)和身份证表(t_card)
实现方案:在从表添加外键列并设置唯一约束,使从表的主键同时作为外键
一对多/多对一关系
特点:最常见的表关系,在"多方"创建外键
多对多关系
示例:学生表(t_stu)和教师表(t_teacher)
实现方式:创建中间表包含两个外键
CREATE TABLE t_stu_tea(
stu_id INT FOREIGN KEY REFERENCES t_stu(id),
tea_id INT FOREIGN KEY REFERENCES t_teacher(id)
);


被折叠的 条评论
为什么被折叠?



