1.外键foreign key
顺序要求:
删数据,先删子表
添数据,先加父表
创建表,先创父表
删除表。先删子表
2.foreign key语法:
例如:foreign key(no)references t_class(cno)
其中no表示当前表字段, references代表引用的意思,cno表示父表字段
3.外键值可以为null
foreign key 需要注意的是:被引用字段至少具有unique约束
4.存储引擎(engine)
MYISAM:(1).不支持事务
(2).三个文件组成一张表 frm(存储格式)MYD(存储数据)MYI(索引文件)
优点:可被压缩,节省存储空间,可转为只读表,提高检索效率
InnoDB(默认)
优点:支持事务,行级锁等,安全。服务器崩了会自动恢复
缺点:不能被压缩
MEMORY
优点:查询速度最快
缺点:不支持事务,数据易丢失
5.和事务transaction相关的语句只有:DML语句insert delete update(多条联合)
transaction存在是为了保证数据完整,安全
6.start transaction 开启事务,(开始)
执行insert(执行记录一下历史操作,不会修改硬盘数据)
执行update(如上)
执行delete(如上)
提交(commit 提交成功 文件改变,且清空历史记录)回滚(rollback 清空历史记录)事务(结束)
7.transaction事务的4大特性
1.原子性:transaction为最小工作单元,不可再分
2.一致性:多条DML语句同时成功或失败
3.隔离性:transaction A 与 transaction B之间有隔离
4.持久性:数据库必须要保证有一条数据永久地存放在磁盘中,transaction事务才算结束
8.事务的隔离性级别
一:读未提交(read uncommitted)
对方事务还未提交,当前事务可读取到对方事务为提交的数据(Dirty Read脏读现象)
二:读已提交(read committed)
对方提交后,我方事务才可读取到数据(解决了Dirty Read,但不可重复读)
三:可重复读:(repeatable read)
解决了:不可重复读问题。存在问题:读取到的数据是幻象
四:序列化/串行化读
解决所有问题但是效率低,事务需要排队
9.mysql中的事务时支持自动提交的(start transaction关闭自动提交)
10.设置事务的全局隔离级别
set global transaction isolation level (后面跟级别)read uncommitted (读未提交)
查看级别
select @@global.tx_isolation;(5.0)
.transaction_isolation(8.0)
11.啥时候添加索引?
(1).数据量庞大
(2).该字段很少的DML操作(因为字段进行修改操作,索引也需要维护)
(3).该字段经常出现在where子句中
12.主键(primary key)和具有unique约束的字段会自动添加索引(根据primary key查询效率较高)
13.select ename, sal from emp where ename='smith'
当ename字段无索引的时候,会进行全表扫描。加索引的时候,语句会根据索引扫描,快速定位。
14.查看sql的执行计划
explain (后面跟查询语句 select ename,sal from emp where sal=5000)
15.创建索引的语法
create index sal_index on emp(sal) 在emp表的sal字段加sal_index索引
16.删除索引的语法
drop index 索引名 on 表名; (mysql中)
17.索引的实现原理
通过B Tree 缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的物理地址,最终通过索引检索到
数据后,获取到关联的物理地址,通过物理地址定位表中的数据,效率最高。
18.索引什么时候失效?
当模糊查询的时候,第一个通配符使用的是%
19.索引分类
单一索引:单字段加索引
复合索引:多字段加索引
主键:primary key自动加索引
唯一:unique约束会自动加索引
20.view视图就是同一张表的数据,通过不同角度去看待
21.创建视图(只有dql才可以用视图对象创建)
create view myView as select empno,ename from emp;
删除
drop view myView;
22.对视图进行增删改查,会影响到原表数据
23.视图(view)可隐藏表的实现细节,适合保密级别高的系统。数据库只对外提供相关的视图
24.设计三范式(不会出现数据冗余)空间浪费
(1)第一范式:任何一张表都应该有主键,且每个字段原子性不可再分
(2)第二范式:建立在第一范式的基础上,且所有的非主键字段完全依赖主键,不能产生部分依赖。(多对多,三张表,关系表两个外键)
(3)第三范式:建立在第二范式的基础上,所有非主键字段直接依赖主键,不可产生传递依赖。(一对多,两张表,多的表加外键)
25.实际开发中,为了满足客户需求,会拿冗余换执行速度
26.一对一有两种设计方案:外键唯一(foreign key),主键共享(primary key)