1.数据的完整性
1. 什么是数据的完整性
保证用户输入的数据保存到数据库中是正确的
2.添加数据完整性
在创建表的时候给表添加约束
3.完整性分类
实体完整性、域完整性、引用完整性
2.完整性的分类
1.实体完整性
- 表中的一行(一条记录)代表一个实体 (entity)
- 实体完整性的作用:标记每一行数据不重复。行级约束
约束类型:
主键约束(primary key):
- 每个表中要有一个主键,数据唯一,且不能为null
创建主键的方式:
create table pe(ID BIGINT PRIMARY key, name VARCHAR(50));
create table pe2(ID BIGINT, name VARCHAR(50), PRIMARY KEY(ID));
- 联合主键:两个字段数据同时相同时,才违反联合主键约束。
create table stu2(ID BIGINT,snum BIGINT, name VARCHAR(50), PRIMARY KEY(ID, snum));
- 更改表结构,设置主键:
ALTER TABLE student ADD CONSTRAINT PRIMARY KEY(sid);
- 唯一约束 :
- 指定列的数据不能重复,可以为空值
CREATE TABLE table1(id int PRIMARY KEY, name VARCHAR(50) UNIQUE);
name不能重复
- 自动增长列
- 指定列的数据自动增长,即使数据删除,依然继续增长
CREATE TABLE table1( id int PRIMARY KEY auto_increment, name varchar (20) UNIQUE );
- 指定列的数据自动增长,即使数据删除,依然继续增长
2.域完整性
使用:限制此单元格的数据正确,不对照此列的其他单元格比较
域,代表当前单元格
域完整性约束:
- 数据类型:数值、日期、字符串
- 非空约束(not null)
CREATE TABLE table1(id int PRIMARY KEY auto_increment,name varchar (20) UNIQUE not null);
-- 默认值约束 (default) CREATE TABLE table1(id int PRIMARY KEY auto_increment,name varchar (20) UNIQUE not null,sex char(1) default '男') -- 设置默认值为 男
3. 参照完整性
什么是参照完整性
- 指表与表之间的一种对应关系
- 通常情况下可以通过设置两张表之间的主键、外键关系,或者编写两表的触发器来实现。
- 有对应参照完整性的两张表,在对他们进行数据插入、更新、删除的过程中,系统都会将被修改表格与另一张对应表格继续对照,从而阻止一些不正确的数据操作
数据库的主键和外键类型要一致
两个表必须是 InnoDB 类型
设置参照完整性后,外键当中的内值,必须得是主键当中的内容
-- 设置外键
CREATE TABLE score(
sid int PRIMARY KEY score int,
CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES stu(id)
);
-- score 设置外键,score 里的sid 关联 stu 里的 id
-- 设置外键
alter table score add CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES stu(id);
-- 多对多关系创建
CREATE TABLE teach(tid int PRIMARY KEY, name VARCHAR(50));
CREATE TABLE stu(sid int PRIMARY KEY, name VARCHAR(50));
CREATE TABLE tea_stu_rel(tid int, sid int);
ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(tid) REFERENCES teach(tid);
ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(sid) REFERENCES stu(sid);
为什么要将表拆分:避免冗余数据