目录
一、数据库三大范式
二、ER图和实例
2.1、什么是ER图:
2.2、ER图核心要素:
2.3、画ER图和数据建模
三、外键约束与级联操作
3.1、什么是外键?
3.2、什么是外键约束?
3.3、创建表时添加外键约束
3.4、添加了外键约束后对数据的影响
3.5、外键约束的操作
3.6、级联操作
四、视图
4.1、什么是视图?
4.2、为什么使用视图?
4.3、视图的操作
五、索引
5.1、什么是索引?
5.2、索引的分类
5.3、索引的底层实现原理
5.4、索引的操作
5.5、索引的注意事项
六、触发器
6.1、什么是触发器
6.2、触发器的四大要素
6.3、创建触发器
6.4、删除触发器
6.5、查看触发器
6.6、查看触发器的创建语法
七、存储过程
第一范式:设计表时,应该尽量保证表中的属性不可再分割(单表如何设计)
第二范式:非主属性必须完全依赖主属性(多对多怎么设计)
第三范式:属性不依赖于其它非主属性。(一对多)
ER(Entity,RelationShip)图又称实体关联图,实体联系图,是用来描述实体本身以及与其它实体关系的一种图。
实体:长方形(t_student)
属性:椭圆形(id,name...)
关系:菱形(拥有)
网站:支持主流数据库模型设计,在线自动生成DDL-裕奥在线ER模型设计工具
外键是用来建立两个表的关联关系的字段。
用来约束表中的数据必须符合外键表的相关条件,以及在更新数据,自动对关联表做出相关处理。
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,...]
REFERENCES <主表名> 主键列1 [,主键列2,...]
1.添加时外键的值必须是在外键表存在的
2.修改时外键的值必须是在外键表存在的
3.删除时,不能先删除外键主表中外键所在行记录,只能先删除外键所在表的记录
1.建表后添加外键约束
ALTER TABLE <数据表名> ADD CONSTRAINT <索引名> FOREIGN KEY (<列名>) REFERENCES <主表名> (<列名>);
2.查看表中的外键
show indexes from 表名;
3.删除外键
alter table <表名> drop foreign key <外键约束名>;
不做级联操作: restrict , no action
级联更新: cascade
级联删除: cascade
设为null: set null
(父表修改了,有关联关系的子表也会跟着改变
加是只能加外键的,删是只能删不是外键的)
视图是一张虚拟表,是一张逻辑表,本身没有数据。本质就是一段SQL,是一段保存在数据库,且可以重复利用的sql
简单:不用关注视图背后的表结构和逻辑,就把视图当成一表用。
安全:仅能访问到视图返回的数据
#创建视图
create or replace view v1
as select * from student;
#使用视图
select * from v1;
#修改视图
create or replace view v1
as select * from student;
#删除视图
drop view v1;
#查看所有视图
select * from information_schema.views where table_schema=‘db1’;
索引类似于 书籍中的目录,本质是一张表。
主键索引:表中的主键字段就是一个索引
唯一值索引:添加唯一值约束时就会添加唯一值索引
普通索引:能快速检索想要的数据
全文索引:通常用于varchar,char,text类型的内容快速查找
B+树
-- 创建普通索引
-- CREATE index i_tc9_a on tc_9(bbb(15));
CREATE index index1 on class(cid);
-- 查看表中有哪些索引
show index from class;
-- 删除索引
drop index index1 on class;
-- 创建一个唯一值索引
CREATE UNIQUE index index1 on class(cid);
1.索引能增加查询速度,但会影响CUD速度
2.一张表最好不要超过3个索引
3.一个字段重复率超过30%时,不建议添加索引
触发器(trigger):监听某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作(insert,delete,update)时就会激活它执行
1.监听地点(table)
2.监听事件(insert/update/delete)
3.触发事件(after/before)
4.触发事件(内部执行逻辑)
delimiter $ //设置MySQL执行结束标志,默认为;
create trigger tg_name -- 触发器名称
after|before -- 触发时间
insert|update|delete -- 监听事件
on table_name -- 监听表名
for each row -- 固定写法
begin -- 开始触发器内部逻辑
update goods set num=num-2 where gid = 1;
end$ -- 结束触发器内部逻辑
delimiter; //重新将MySQL执行结束标志设置为;
drop trigger 名称;
show triggers;
select * from information_schema.TRIGGERS where trigger_schema=‘db3’ and event_object_table = ‘t1’;
show create TRIGGER t1;