事务
-- A转账B
-- B到账A
-- 只有A转账成功且B到账成功,该事件才算结束
-- 若一方不成功,则该事务不成功
事务特性(ACID)
名称 | 描述 |
---|---|
原子性(Atomicity) | 事务是不可分割的,事务的操作要么都发生,要么都不发生 |
一致性(Consistency) | 事务前后数据的完整性必须保持一致 |
隔离性(Isolation) | 多个用户并发访问数据库,为每个用户开启的事务,不能被其他事务操作数据干扰,多个并发事务之间要相互隔离。 |
持久性(Durability) | 事务一旦被提交则不可逆,被持久化到数据库,接下来即使数据库发生故障也不应该对其有任何影响 |
事务并发导致的问题
名称 | 描述 |
---|---|
脏读 | 一个事务读取另一个事务未提交的数据 |
不可重复读 | 一个事务读取表的某行数据,多次读取结果不同 |
虚读(幻读) | 一个事务内读取到别的事务插入的数据,导致前后读取内容不一致 |
隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | 是 | 是 | 是 |
读已提交 | 否 | 是 | 是 |
可重复读 | 否 | 否 | 是 |
串行化 | 否 | 否 | 否 |
读未提交
读已提交
可重复读
串行化
执行事务过程
-
关闭自动提交
-
如果正常执行完毕提交事务
-
如果有异常则回滚事务
自动提交
-- 关闭
SET autocommit=0;
SET autocommit=FALSE;
-- 开启
SET autocommit=1;
SET autocommit=TRUE;
事务开启
-- 标记事务的开始,从这个后的sql都在同一个事务内
START TRANSACTION
其他操作
SAVEPOINT 保存点名; -- 设置事务保存点
ROLLBACK TO SAVEPOINT 保存点名; -- 回滚到保存点
RELEASE SAVEPOINT 保存点名; -- 撤销保存点
索引
-
提高查询速度
-
确保数据唯一性
-
加速表和表之间的连接 , 实现表与表之间的参照完整性
-
分组和排序进行数据检索 , 可减少分组和排序时间
-
全文检索字段进行搜索优化
原则
-
索引不是越多越好,小数据量的表不需要加索引
-
不要对经常变动的数据增加索引
-
索引一般加在经常要查询的列上
分类
主键索引
-
最常见的索引类型,不允许为空值
-
确保数据记录的唯一性
-
确定特定数据记录在数据库中的位置
普通索引
-
index 和 key 关键字都可以设置常规索引
-
加在查询找条件的字段
-
不宜添加太多常规索引,影响数据增删改
唯一索引
全文索引
-
特定的数据库引擎下才有:MyISAM
-
只用于CHAR , VARCHAR , TEXT数据列类型
-
适合大型数据集
创建
-- 直接创建
CREATE INDEX 索引名 ON 表名(字段名);
-- 修改表结构创建
ALTER TABLE 表名 ADD INDEX 索引名(字段名);
删除
-- 方法一
DROP INDEX 索引名 ON 表名;
-- 方法二
ALTER TABLE 表名 DROP INDEX 索引名;
查询
-- 方法一
show indexes from 表名;
-- 方法二
show keys from 表名;
失效
-
查询的数据量大于总量的1/3
-
对条件作运算
-
对条件作数据类型转换
-
模糊查询