sql-5-事务,索引
事务
1、ACID概念
-
原子性(Atomicity)
- 要么都成功,要么都失败
-
一致性(consistency)
- 事务前后的数据完整性保持一致
-
持久性(Durability)
- 事务一旦提交则不可逆,持久保存到数据库中(事务一旦提交,即使立刻关闭服务器也会持久保存)
-
隔离性(Isolation)
- 多个用户或多个事务同时进行时,相互不影响
2、四种隔离级别
- 脏读
- 只一个事务读取了另外一个事务未提交的数据。
- 不可重复读
- 在一个事务内读取表中的一行数据,多次读取结果不一样(因为别人提交了数据)
- 虚读(幻读)
- 是指一个事务读取了别的事务插入的数据,导致前后读取不一致。
3、事务处理操作顺序
-- mysql时默认开始事务自动提交的
set autocommit = 0;
set autocommit = 1;
-- 事务开启
-- 标记一个事务的开始,从这个之后的sql都在一个事务内了
start transaction;
insert xx;
insert xx;
-- 提交:之后就会持久化
commit;
-- 回滚:提交失败之后的处理,还原处理前数据
rollback
-- 结束后需要开启事务自动提交
4、模拟场景
-- 创建shop数据库
CREATE DATABASE `shop` CHARACTER SET utf8 COLLATE utf8_general_ci;
USE shop;
-- 创建表单
CREATE TABLE `account`(
`id` INT(3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL ,
`money` DECIMAL(9,2) NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 输入原始数据
INSERT INTO `account`(`name`,`money`)
VALUES('A',1000.00),
('B',2000.00);
-- 正式开始
SET autocommit=0; -- 关闭自动提交
START TRANSACTION; -- 开启一个事务
UPDATE account
SET money=money-200
WHERE `name`='A';
UPDATE account
SET money=money+200
WHERE `name`='B';
COMMIT; --认为数据改好就可以提交了,一旦提交不能回复
ROLLBACK; -- 只要觉得数据改的不好,可以直接回到原始状态
SET autocommit=1; --数据改好之后需要把自动提交打开
索引
mysql定义:索引(index)是帮助mysql高效获取数据的数据结构
提取句子主干,就可以得到索引的本质:索引是数据结构
1、索引的分类
-
主键索引(primary key)
- 唯一索引(unique key)
- 常规索引(key/index)
- 全文索引