数据库事务的四大原则

事务 原则:ACID
原子性(Atomicity)要么都成功 要么都失败
一致性(Consistency)事务前后数据的完整性要保证一致
持久性(Durability)事务一旦提交则不可逆,它对数据库中的数据的改变是永久的,接下来即使数据库发生故障也不应该对其有任何影响 
隔离性(Isolation)多个用户并发访问数据库时,数据库为每个用户开启事务,不能被其它事务的操作数据库所干扰,多个并发事务之间要相互隔离。
隔离所导致的一些问题 1、脏读:指一个事务读取了另外一个事务未提交的数据 2、不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同(这个不一定是错误的,只是某些场合不对) 3、虚读(幻读)在一个事务内读取了别的事务插入的数据,导致前后读取不一致

一个支持事务(Transaction)的数据库,必须要具有这四种 特性 ,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

mysql是默认开启事务自动提交的
set autocommit=0 /*关闭*/
set autocommit=1 /*开启-默认的*/

-- 手动处理事务
set autocommit=0 -- 关闭自动提交事务
-- 事务开启
START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务内
-- 提交:持久化 -成功
COMMIT
-- 回滚:回到原来的样子 -失败
ROLLBACK
-- 事务结束
set autocommit=1 -- 开启事务提交

SAVEPOINT 保存点名 -- 设置一个事务的保存点名
ROLLBACK TO SAVEPOINT 保存点名 -- 回滚到保存点
RELEASE SAVEPOINT 保存点名 -- 撤销保存点

-- SQL执行 A给B转账 A1000 -> 200
-- SQL执行 B收到A的钱 A800 -> B 400
-- 模拟转账:事务
set autocommit=0; -- 关闭自动提交
START TRANSACTION -- 开启一个事务
update testtable set money=money-500 where `name`='A'; -- A减500
update testtable set money=money+500 where `name`='B'; -- B加500
COMMIT; -- 提交事务
-- ROLLBACK; -- 回滚 如果填写有误不提交则执行回滚
set autocommit=1; -- 恢复默认值

你可能感兴趣的:(MySQL,数据库,java,开发语言)