什么是数据完整性:
保证用户输入的数据保存到数据库中是正确的
如何添加数据完整性:
在创建表时给表中添加约束
完整性分类
实体完整性
什么是实体完整性
表中的一行(一条记录)代表一个实体(entity)
实体完整性作用
标识每一行数据不重复,行级约束
约束类型:
主键约束(primary key)
每个表中要有一个主键,数据唯一,且不能为null
写法1:
CREATE TABLE 表名 (字段名1 数据类型 primary key, 字段名2 数据类型)
CREATE TABLE person (
ID BIGINT PRIMARY KEY, #ID字段设为主键
name VARCHAR(50)
);
写法2:
CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型,primary key(要设置主键的字段));
CREATE TABLE person (
ID BIGINT,
name VARCHAR(50),
age INT,
PRIMARY KEY(ID)
);
联合主键
将多个字段联合在一起作为主键
CREATE TABLE 表名 (字段1 数据类型, 字段2 数据类型,primary key(主键1,主键2));
CREATE TABLE student (
ID BIGINT,
stu_number BIGINT,
name VARCHAR(50),
PRIMARY KEY(ID,stu_number)
);
已有没有主键的表,修改表,添加主键
ALTER TABLE student MODIFY CONSTRAINT PRIMARY KEY(ID);
唯一约束(unique)
指定列数据不能重复,但可以为null
CREATE TABLE 表名 (字段名1 数据类型 , 字段名2 数据类型 UNIQUE);
CREATE TABLE student (
id BIGINT PRIMARY KEY,
name VARCHAR(50) UNIQUE
);
自动增长列(auto increment))
指定的列的数据自动增长
即使数据删除,还是从删除的序号继续往下
例如 7行记录删除,再添加新记录,序号从8开始
CREATE TABLE 表名 (字段名1 数据类型 primary key auto_increment, 字段名2 数据类型)
CREATE TABLE student (
id BIGINT PRIMARY KEY auto_increment,
name VARCHAR(50) UNIQUE
);
域完整性
限制此单元格的数据正确,不对此列其他单元格比较
域代表当前单元格
域完整性约束
数据类型
数值类型、日期类型、字符串类型
非空约束(not null)
默认值约束(default))
CREATE TABLE student (
id BIGINT PRIMARY KEY auto_increment,
name VARCHAR(50) UNIQUE NOT NULL,
gender CHAR(1) DEFAULT '男'
);
参照完整性
什么是参照完整性
表与表之间的一种对应关系
通常情况下通过设置两表之间的主键、外键关系、或者编写两表的触发器来实现
有对应参照完整性的两张表,在对他们进行数据插入,更新、删除的过程中,系统都会讲被修改表格与另一张对应表格进行对照,从而阻止一些不正确的数据的操作
前提要求
数据库的主键和外键类型一定要一致
两个表必须得要是InnoDB类型
设置参照完整性后,外键当中的内值,必须得是主键当中的内容
一个表设置当中的字段设置为主键,设置主键的为主表
创建表时,设置外键,设置外键的子类
CREATE TABLE `stu` (
`ID` int(255) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `stu_score` (
`id` int(11) NOT NULL,
`score` double NOT NULL,
`科目` varchar(255) NOT NULL,
`stu_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE stu (
id int PRIMARY KEY,
name varchar(50),
age INT
);
create TABLE score (
sid int, #外键类型 与 学生表id 类型一直
score INT,
CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES stu(id)
);
外键的值选项
在已有的表中,添加外键约束
alter table score add CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES stu(id);