数据的完整性(实体完整性、域完整性、引用完整性)
1 数据库的完整
-
用来保证存入数据库中的数据是有效的,即有效性和准确性;
-
确保数据的完整性 ≠ 给数据添加约束
-
完整性的分类:
- 实体完整性,即行完整性
- 阈完整性,即列完整性
- 引用完整性(关联表完整性);
- 主约束键:
primary key
- 唯一约束:
unique [key]
- 非空约束:
not null
- 默认约束:
default
- 自动增长:
auto_increment
- 外键约束:
foreign key
- 主约束键:
-
各类约束最好在创建表的时候设置,多个约束条件应用空格隔开
-- eg create table student( stuNum int primary key auto_increment; passwd varchar[12] not null default '123456'; stuName char[30] not null; id int not null; phoneNum varchar(20) not null; address varchar(30) not null default '学生宿舍'; birthday datetime; emali varchar(30) );
2 实体完整性
- 实体:表中的唯一一行,代表一个实体,
- 实体完整性的作用是标识每一行数据都不重复
- 约束类型主要包括:
主键约束:primary key
唯一约束:unique
自动增重列:auto_increment
2.1 主键约束(primary key)
-
每个表中要有一个主键
-
主键的特点:数据唯一(即每行的值都不一样),且不能为null
-
添加方式:
第一种添加方式:在创建表的时候直接添加在属性类型之后添加primary key-- 学生的id为主键约束 create table student(id int primary key, name varchar(10))
第二种方式:先写完所有属性,然后添加一个primary key,这种方式可以创建联合主键
create table student(id int, name varchar(10), primary key(id) ); create table student(classId int, id int, name varchar(10), primary key(classId, id) );
第三种方式:先正常创建表,然后通过 alter 添加一个primary key
create table student( id int, name varchar(10) ); alter table student add primary key(id);
2.2 唯一约束(unique)
唯一约束的特点是数据值唯一,与主键约束不同的是,唯一约束可以是null;
create table student(Id int primary key, name varchar(5) unique);
2.3 自动增长序列(auto_increment)
-
每新建一个实体,会自动增加1
-
该属性类型只能是整数类型
create table student(id int primary key auto_increment, name varchar(5) ); -- insert into student(name) values('老大'); -- id为1,自动生成 -- insert into student(name) values('老二'); -- id为2,无需手动插入,自动生成
3 域完整性
- 作用:限制此单元格是符合要求的数据
- 域完整性约束:
- 数据类型
- 非空约束 (not null)
- 默认值约束(default)
- check约束
3.1 数据类型约束
-
数值类型
使用方法:直接在属性后面加类型名称即可; -
日期类型
表示时间值的日期和时间类型为DATE、DATETIME、TIMESTAMP、TIME和YEAR。 -
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET -
二进制类型
3.2 非空约束
-- 关键字
not null
-- 在创建实体时便不能将name值置空,必须给其一个值
create table student(name varchar(5) not null);
3.3 默认值约束
-- 关键字
default
-- 在创建实体类时,若没有明确给sex赋值,那么会自动添加默认值'女'
create table student(sex varchar(5) default '女');
4 引用完整性
- 外键列:是用来保存别的表中主键值列
- 外键约束:
foreign key
- 作用:保证表与表之间引用的完整性,被定义为外键的列属性用于引用另一个表里的主键列属性
-- 先创建一张学生的信息表
create table student(
id integer(10) primary key, -- 学号
age int, -- 年龄
sex varchar(2), -- 性别:男,女,人妖,太监
address varchar(50), -- 地址
email varchar(20) -- 邮箱
);
-- 学生各科的成绩表
create scores(
id integer(10),
java int,
cplusplus int,
c int,
mysql int,
-- 添加外键约束, 将scores.id列属性 关联到student.id列属性
foreign key(id) references student(id)
);
-- 可以用 constraint 约束名称 给外键约束取名
constraint abc foreign key(id) references student(id);
-- 或者先创建学生的各科成绩,然后添加一个外键列属性
alter table scores add foreign key(id) references student(id);
-- 或者
alter table scores add constraint abc foreign key(id) references student(id);
-- 或者先创建学生的各科成绩,然后添加一个外键列属性
alter table scores add foreign key(id) references student(id);
-- 或者
alter table scores add constraint abc foreign key(id) references student(id);