mysql入门(三)
1. 数据的完整性
实体:一个实体就是一条记录
域:就是一个字段
引用的完整性:两张表之间的关联的完整(不可避免的)
自定义完整性:自己定义的规则,可以保证各种规范不出现偏差.
(1).保证实体完整性
1.自动增长的列(auto_increment)
2.主键的约束(primary key)
3.唯一键(unique)
(2)保证域的完整性
1.数据类型的约束
2.默认值的约束
3.非空的约束
(3)保证引用的完整性
建立外键->只能先删除从表,才能删除主表
(4)自定义的完整性
1.存储过程 (是mysql当中的特殊自定义函数)
2.触发器 (是一个特殊的存储过程,不用调用)
2. 外键(foreign key)
外键:从表的关联字段。外键的约束是为了保证引用的完整性,外键和主表的关联字段名字可以不一样,数据类型要一致.
特点:
1.主表中不存在的记录,从表中也不允许插入
2.主表中存在的记录,从表中可以先行删除
3.先删除从表,在删除主表
--学校数据库,学生的信息是主表,成绩是从表 create table userinfo( id int auto_increment primary key comment‘学号‘, stu_name char(64) ); insert into userinfo values(null,‘小明‘),(null,‘小马‘),(null,‘小李‘),(null,‘小刘‘); -- 对于从表来说,主键不一定是必须的,但是按照理论应当添加一个 create table score( sid int auto_increment primary key comment‘主键‘, stuno int comment‘学号‘, ch float, math float, -- 相当于把关键字写成函数用:从表score中的stuno字段关联主表userinfo中的id字段 foreign key(stuno) references userinfo(`id`) ); insert into score values(null,1,100,90),(null,3,130,130);
外键的操作:
1.严格约束(constraint);
2.置空操作(set null),主表删除,从表置空;
3.联级操作(cascade),主表更新,从表联动(更新);
4.删除的时候也可以使用cascade,这样可以保证表中没有垃圾数据。
外键在数据量比较小的时候使用,我们要设置外键,必须要对表的关系非常的清楚。在从表中的数据和主表中的数据不对等的时候,我们还需要手动添加或删除。
1.设置了外键会影响效率
2.一般来说,每个从表都是单独的数据
外键升级版本 -> 触发器
foreign key(stuno) references userinfo(`id`) on delete set null on update cascade -- 在删除数据的时候设置为空(删完之后,这条信息就是垃圾了), 在更新的时候级联 -- 完整的外键(在建表的时候) foreign key(stuno) references userinfo(`id`) on delete cascade on update cascade -- 在删除数据的时候级联,在更新的时候级联
删除外键,应当删除外键的名字
alter table score drop foreign key `score_ibfk_1`;
添加外键(建表的时候没有设置外键,建完表之后添加外键的操作),可以自定外键的名称(stuno_id)
alter table `score` add CONSTRAINT `stuno_id` FOREIGN KEY (`stuno`) REFERENCES `userinfo` (`id`)ON DELETE CASCADE ON UPDATE CASCADE;
3. 实体之间的关系
一个实体就是一条记录。
1.一对一的关系
2.一对多的关系
3.多对一的关系
4.多对多的关系
1). 一对一的关系
一个主表中的数据对应一个从表中的数据。
2). 一对多(多对一)的关系
订单系统:一个人买了很多不同类目的商品。
3). 多对多的关系
多对多关系中,不太区分谁是主要的表。
4. 数据库的设计
(1). 标识的实体
(2). 实体的属性
(3). 标识实体之间的关系:根据要求设计
(4). 生成E-R图
5. 数据的规范化
建立表的一些规范,统称为三范式。
(1)第一范式
第一范式:(1NF)确定每一列的数据原子化(不可在拆分)
(2)第二范式
第二范式:(2NF)基于第一范式,一张表描述一件事物(从表的非主键字段依赖主键字段)
(3)第三范式
第三范式:(3NF)必须基于第二范式,消除传递依赖(主键信息既可以查到说有关联信息)