什么是事务
要么都成功,要么都失败
事务原则:ACID原则 原子性,一致性,隔离性,持久性 (脏读,幻读...)
原子性(Atomicity)
要么都成功,要么都失败
一致性(Consistency)
事务前后的数据完整性要保证一致。
持久性(Durability) --事务提交
事务一旦提交则不可逆,被持久化到数据库中!
隔离性
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务操作数据所干事务之间要相互隔离。
事务
mysql是默认开启事务自动提交的 SET autocommit =0 --关闭 SET autocommit=1 开启(默认的) 手动处理事务 SET autocommit =0 关闭自动提交 事务开启 START TRANSACTION 标记一个事务的开始,从这个之后的sql都在同一事务内 INSERT xx INSERT xx -- 提交:持久化 (成功!) COMMIT --回滚 ROLLBACK --事务结束 SET autocommit=1 --开启事务自动提交 --了解 SAVEPOINT 保存点名 --设置一个事务的保存点 ROLLBACK TO SAVEPOINT 保存点名 --回滚到保存点 RELEASE SAVEPOINT 保存点名 --撤销保存点
模拟转账: 事务
CREATE TABLE `account`( `id` int(3) not null AUTO_INCREMENT, `name` varchar(30) not null, `money` decimal(9,2) not null, PRIMARY key (`id`) )engine =innodb DEFAULT CHARSET =utf8 insert into account(name,money) values("A",2000.00),("B",10000.00) set autocommit =0; --关闭自动提交事务 start transaction --开启一个事务 update account set money=money-500 where name="A" -- A 减500 update account set money=money+500 where name="B" -- B加500 commit ; -- 提交事务 rollback; -- 回滚事务 set autocommit=1; -- 恢复默认值
索引
MySQL 官方索引的定义:索引(index)是帮助MySQL高校获取数据的数据结构,提取句子主干,就可以得到索引的本质,索引是数据结构。
http://blog.codinglabs.org/articles/theory-of-mysql-index.html
1.索引分类
- 主键索引(PRIMARY KEY)
唯一的标识,主键不可重复,只能有一个列作为主键
- 唯一索引(UNIQUE KEY)
避免重复的列出现,唯一索引可以重复,多个列都可以标识位,唯一索引
- 常规索引(KEY/INDEX)
默认的,index,key 关键字类设置。
- 全文索引(FULLTEXT)
在特定的数据库引擎下才有,MyISAM
快速定位