数据完整性

数据完整性
保证数据的字段的完整性,准确性,可用性。
实现方式
添加字段约束。
分类

实体完整性

实体:
记录(表中的一行数据)
实体完整性:
保证表中的记录是准确的,可用的。
实现:
主键约束[特性:自动增长],唯一性约束

主键约束

主键
表中用于唯一标识一条记录的字段称为主键。
主键特性
唯一,且不能为空。
定义主键的关键字
primary key
主键的选择
一般选中跟业务数据无关的字段作为主键
(自己添加一列通常叫id,作为主键)

通过SQL语句设定主键
新建表的时候,指定主键

实现方式:
在想定义为主键的字段的类型后面添加primary key约束即可
添加数据的时候:如果主键字段没有给值则该记录保存不了;

如果主键字段给的值已经存在则该记录也保存不了。
create table student(sid int primary key, snum varchar(8), sname varchar(5), stel varchar(11));
或 (用于指定联合主键) primary key(字段1,字段2…)
create table student(sid int, snum varchar(8), sname varchar(5), stel varchar(11), primary key(sid));

表已经存在,追加主键

注意:追加主键的时候,要首先修改表中的数据满足主键要求。
先新增字段
alter table stu_info add id int first;
在追加为主键
alter table stu_info change id id int primary key;

alter table stu_info modify id int primary key;
或 说明:constraint关键字表示约束 pk_id自定义约束名 primary key(id)约束类型及约束哪个字段
alter table stu_info add constraint pk_id primary key(id);

删除主键约束

删除student表的sid主键约束
alter table student drop primary key;

主键的特性:自增长

自增长
在添加新记录的时候,可以不指定主键值,主键值会自己添加。
每添加一条新记录,主键会自动增加1。自增长从1开始。
实现:auto_increment

新创建表,指定自增长

create table user_info(id int primary key auto_increment, name varchar(6), pwd varchar(8));

表已经存在,追加自增长

先创建表,指定主键
create table user_info(id int primary key, name varchar(6), pwd varchar(8));
在追加主键为自增长
alter table user_info change id id int auto_increment;

alter table user_info modify id int auto_increment;
或(不行,是特性不是约束)
#alter table user_info add constraint ai_id auto_increment(id);

删除自增长特性

alter table user_info change id id int;

alter table user_info modify id int;

删除带有自增长的主键的时候,应该先删除自增长在删除主键。

主键约束说明

一张表一般必须设置主键;
一张表最多只能有一个主键;
一张表的主键可以是联合主键,但是主键的个数还是1。

唯一性约束

唯一性约束:
保证记录与记录之间的字段是惟一的,可以为null,但是不能重复。
4.2 实现:unique 或 unique key
4.3 在一张表中唯一约束可以有多个

新建表的时候,指定唯一性

create table user_info(id int primary key auto_increment, uname varchar(6) unique, upwd varchar(8));
或 (创建联合唯一)
create table student(id int primary key auto_increment, snum varchar(6), sname varchar(5),
stel varchar(11), unique(snum, stel));
或 (创建单个唯一)
create table student(id int primary key auto_increment, snum varchar(6), sname varchar(5),
stel varchar(11), unique(snum), unique(stel));

表已经存在,追加唯一性约束

给student表或者user_info表追加唯一性(注意:保证表中数据已经满足唯一性)
alter table student change sname sname varchar(5) unique;
或 (注意:保证表中数据已经满足唯一性)
alter table studnet modify sname varchar(5) unique;
或 (注意:保证表中数据已经满足唯一性)
alter table user_info add constraint uq_upwd unique(upwd);

4.6 删除唯一性约束
alter table student drop index sname;

总结:

实体完整性约束追加:
可以通过change或modify或add constraint实现

实体完整性约束的删除:
不可以通过change和modify实现

3.2 域完整性
3.2.1 域完整性

1.1 域:指代字段
1.2 包含以下的完整性约束:
字段数据类型(创建表的时候指定)
非空性约束 (not null)
默认值约束 (default 默认值)

3.2.2 非空性约束

2.1 非空性约束:限定字段不能没有值。一个表中可以有多个非空约束

2.2 新建表的时候,指定非空性约束
create table student(id int primary key auto_increment, sname varchar(5) not null, stel varchar(11));

2.3 表已经存在了,追加非空性约束
alter table student change stel stel varchar(11) not null;

alter table student modify stel varchar(11) not null;
或 (报错,不行)
#alter table student add constraint nn_stel not null(stel);

2.4 删除非空性约束
alter table student change stel stel varchar(11);

alter table student modify stel varchar(11);
drop不行

2.5 删除以下表结构的stel的字段约束
创建student表,指定stel字段为唯一且非空的
create table student(id int primary key auto_increment, sname varchar(5) not null, stel varchar(11) unique not null);
以下语句只能删除非空性约束
alter table student modify stel varchar(11);
在此删除唯一性约束
alter table student drop index stel;

3.2.3 默认值约束

3.1默认值约束:当某个字段没有指明数据的时候,用默认值作为数据。个数不限。

3.2 新建表的时候,指定字段默认值约束
create table bank(id int primary key auto_increment, name varchar(5), pwd varchar(10), money int default 0);

3.3 表已经存在,给字段追加默认值约束
创建表的时候不指定默认值约束
create table bank(id int primary key auto_increment, name varchar(5), pwd varchar(10), money int);
追加默认值约束
alter table bank change money money int default 0;

alter table bank modify money int default 0;
不能通过add constraint追加默认值约束

3.4 删除默认值约束
alter table bank change money money int;

alter table bank modify money int;
不能通过drop删除默认值约束

域完整性的追加:只能用change和modify实现。不能用add constraint追加。
域完整性的删除:只能用change和modify实现。不能用drop实现。

3.3 引用完整性
3.4 自定义完整性