事务:
个人理解事务是数据库逻辑集合操作的最小单元,也就是说在做数据库的一系列操作要么全部执行,要不全部不执行。
事务的四大特性:
原子性:
不可分割的操作单元,一个事务中的所有操作要么全部成功,要么全部callback到执行前的状态。举例:a和b两人转账操作,a账户余额500,b账户余额500,a向b转账100成功,b接收a100失败,那个转账操作全部callback回之前状态。
一致性:
一个事务在对数据库操作前后,数据库的状态一致。举例:a和b两人转账操作,a账户余额500,b账户余额500,a向b转账100,a的余额变为400,b的余额变为600,a和b两人在做转账之前余额总和为1000,转账之后余额综合认为1000,那么他就符合事物的一致性。否则不满足事物的一致性。
隔离性:
在并发访问数据的时候,一个正在执行的事物在执行完毕之前,对其他的会话是不可见的,多个并发事物之间的数据是独立的。
持久性:
一个事务一旦被提交,它对数据库中的数据影响是永久性的。
事务的隔离级别:
读未提交(read uncommitted):
读到没有被提交的数据,所有这个隔离机制无法解决脏读,不可重复读,幻读中的任何一种,实际应用中也很少用到。
读已提交(read commited):
一个事务要等待另一个事务提交之后才能读取数据
可重复读(repeatable read):
在开始读取数据库时不允许修改数据。
序列化(serializble):
序列化的隔离级别最高,能避免脏读,重复度,幻读等问题,但是效率低下,比较消耗数据库性能,一般也不推荐使用。
脏读:一般体现在查询过程
幻读: 一般体现在插入和删除过程
存储过程示例:
定义存储过程:
示例表结构:
DELIMITER $
CREATE PROCEDURE insertTest()
BEGIN
INSERT INTO admin (`username`,`password`)
VALUE ("A","root"),("B","root"),("C","root"),("D","root"),("E","root");
END $
调用:
CALL interTest() $