一、数据完整性
1.概念:指数据能正确反映实际情况
2.分类
- 实体完整性:标识符或主键完整性(主键、唯一值约束)
- 域完整性:限制数据类型、格式、取值范围(检查、默认值、外键约束)
- 引用完整性:输入或删除时,不能存在引用不存在的值(外键约束)
- 自定义完整性:自定义规则
3.约束:限制表数据的一个条件
约束写法
- 行级约束:定义在每个字段后(字段基础上)
- 表级约束:定义在表后(表基础上)
二、非空约束(not null)
1.创建表时指定非空约束
create table student(id int not null,phone int);
2.将指定列修改为非空约束
alter table student modify column phone int not null;
3.删除非空约束
alter table student modify column phone int;
三、唯一约束(unique)
1.创建表时指定唯一约束
create table student(id int unique,phone int);
2.将指定列修改为唯一约束
方式:定义唯一约束名称,uc_xxx(下划线后面为自己定义的名称),且一个表中只能出现一个,不能重复使用
单列:alter table student add constraint uc_name unique(name);
复合唯一约束(表级约束):alter table student add constraint uc_idname unique(id,name...);
3.创建表时指定复合唯一约束(表级约束)
注:复合唯一约束指组合的内容唯一,而不是单独分开来判断是否唯一(例如下面的id与name)
create table student (id int,name varchar(255),constraint uc_name unique(id,name));
4.删除列的唯一约束
删除方式:通过前面定义的唯一约束的名称删除(uc_xxx),例如上方定义了uc_name的唯一约束名称
alter table student drop index uc_name;
四、主键约束(primary key)
概念:非空+唯一(指定列/多列组合不允许重复,也不允许出现空值)
注意:一个表中最多允许有一个主键
1.创建表时指定主键
create table student(id int primary key,phone int);
2.增加主键约束
方法:在key()括号内写入字段名称
单列:alter table student add primary key(id);
复合主键(表级约束):alter table student add primary key(id,name...);
3.删除主键约束
方法:一个表中最多只有一个主键,所以直接删除,不需要指定字段
alter table student drop primary key;
4.创建表时指定复合主键(表级约束)
方法:constraint pk_xxx增加主键,pk_后面为自定的名称(constraint pk_xxx可省去)
create table student(id int, phone int, constraint pk_id primary key(id,phone));
五、check约束
1.概念:约束字段的取值范围
2.声明:MySQL不支持check约束。但可以定义,不起作用。
3.定义check约束
create table student(age int check(age>0 and age<100)) ;
六、默认值约束(default)
1.概念:为字段赋默认值
2.创建表时添加默认值
create table student(name varchar(10) defalut "C++");
3.给表中的一列添加(修改默认值)
alter table student modify column name varchar(10) default "C++";
4.删除默认值
方法:赋值为null即可
alter table student modify column name varchar(10) default null;
七、外键约束
1.概念:一个表的外键取值参考另一个表的主键,而且外键和主键的长度、精度要相同
2.在事例中介绍语法
例如:有一个学生表(student)和一个班级表(class),学生表中的班号为外键,参考班级表中的主键
班级表:create table class(class_no int primary key, class_name varchar(255));
①.创表时指定外键
方式:constraint kf_外键名 foreign key(子表字段) references 父表名(父表字段);
create table student (student_id int, student_name varchar(20),class_no int, constraint fk_stucla foreign key(class_no) references class(class_no));
②.增加外键约束
alter table student add constraint fk_stucla foreign key(class_no) references class(class_no);
③.删除外键约束
方式:通过外键约束名称删除
alter table student drop foreign key fk_stucla;
3.注意事项
- 当外键在插入一行新数据时,外键的内容必须是主键中存在的,否则不能添加
- 主键一定要设置为primary key
八、级联设置
1.概念:创建外键时,允许子父表之间有所联系(更新/删除)。父表:含有主键的表。子表:含有外键的表
2.级联的三种形式
- cascade:当父表数据更新时,子表数据也会更新。父表数据删除时,子表对应一行都会删除
- no action:当子表已经使用了关联数据,则父表不能执行更新/删除功能
- ste null:当父表数据更新/删除时,子表数据将变为null(因此子表的外键约束不能设置为非空约束(not null))
3.代码演示
注意:on delete和on update代表更新和删除,根据自己的需求使用,也可以只使用其中一个
添加级联设置:create table student(student_no int, class_no int, constraint fk_stucla key(class_no) references class(class_no) on delete cascade on update cascade);
九、表的自增值
1.特点:自增值在创建对象时,如果没有赋值,默认从0开始递增。赋值后从赋的值开始递增。
2.代码演示
①创建自增列
create table student(id int auto_increment);
②为现有表指定自增列
alter table student modify column id int auto_increment;
③删除自增列
删除自增列此处是使用not null方法。使用此方法后、向表中主键插入数据时就必须带上值
alter table student modify column id int not null;
④设置自增起始值
- auto_increment=起始值;
- 此种方法目前有错...待更新