事务
概述
用来统一sql语句的操作
防止删了这种情况的发生
删了部门,但是删员工的出错了没删成
事务中的语句要么全部都运行成功,要么全部都不运行成功
且可以撤销事务的操作:叫事务回滚
介绍
正常不开启事务
就每一条语句都是一个事务
操作语句
案例
==事务==
-- 开启事务
start transaction ;
-- 删除部门
delete from tb_dept where id = 2;
-- 删除部门下的员工
delete from tb_emp where dept_id == 2;
-- 提交事务
commit;
-- 回滚事务
rollback ;
select * from tb_dept;
select * from tb_emp;
事务四大特性(面试)
最小单元
事务完成包含事务提交和事务回滚
索引
引入
针对数据量较大的表进行查询,如果不建立索引,查询一条语句的时间会变的非常长
可以看到,这个花了13s多
在sn字段建立完索引后,只花了6ms
select * from tb_sku where sn = '100000003145008'; -- 14s
select count(*) from tb_sku;
create index idx_sku_sn on tb_sku(sn);
-- 创建 : 为tb_emp表的name字段建立一个索引 .
create index idx_emp_name on tb_emp(name);
-- 查询 : 查询 tb_emp 表的索引信息 .
show index from tb_emp;
-- 删除: 删除 tb_emp 表中name字段的索引 .
drop index idx_emp_name on tb_emp;
介绍
可以认为是一本书的目录,帮助我们快速查找
加了主键和unique的字段会默认创建索引
建立索引
简单的来是介绍
建了个二叉搜索树(不同索引有不同结构!具体看下面的)
便于查找
而没建立索引的就是全表扫描
建立索引是一次性操作,建立后,添加数据也会加入对应的二叉搜索中,就是会更新对应的索引(当然这样进行数据更新的话,效率也会受影响)
优缺点
索引的结构
索引的结构
有很多种
二叉搜索树,按顺序存储的话存储会像图二那样,搜索效率还是低
红黑树可以解决这种问题
但是Mysql里面索引默认是用B+树来结构组织索引
因为红黑和二叉一个节点下只能存储两个节点,效率还是比较低
B+树
B+树上面的节点称为非叶子节点,最下面那行称为叶子节点(含数据的)
比如查29数据,内部是用二分查找的方式来进行搜索
比如这个29在6和38之间
走p1到下面那个节点
然后再比较
恰好29=29,走p3找到对应29的data
操作语法
索引是针对字段而言的(建树肯定是一种数据类型的多个数据呗)
!!且你主键和加了unique的字段会默认创建索引!!