目录
第一范式:设计表时,应该尽量保证表中的属性不可再分割(单表如何设计)
第二范式:非主属性必须完全依赖主属性(多对多怎么设计)
第三范式:属性不依赖于其它非主属性。(一对多)
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;