标签:事务 相关 单位 tab code 包括 执行 实现 操作
一、什么是事务
MySQL事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务。
举一个简单的例子:银行转账事务。A要给B转账10000元人民币,要实现的操作包括:
- 操作1:A账户中减去10000元;
- 操作2:B账户中增加10000元。
如果银行系统A完成了减去1000元的操作,这时系统出现问题,没有给B账户进行增加1000元的操作。很明显,这种操作是存在极大的风险的。在这个事务中,要么事务中的多个操作都成功,要么都失败,不能出现某些操作成功,而某些操作失败的情况。即:操作1和操作2都成功,完成转账;或者操作1和操作2都失败,转账失败。
二、事务的四大特性(ACID)
由上面的例子,我们很容易就可以总结出事务的四大特性。
1. 原子性(Atomicity):事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。
2. 一致性 (Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。其他特性都是服务于一致性。
3. 隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。
4. 持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。
三、事务隔离级别
1. SQL中定义了4中隔离级别。
2. MySQL中默认的隔离级别为Repeatable read
select @@tx_isolation //可以通过这个语句进行查看
set transaction isolationlevel //可以通过这个语句进行设置隔离级别
3. JDBC设置隔离级别
con. setTransactionIsolation(int level)
参数可选值如下:
Connection.TRANSACTION_READ_UNCOMMITTED;
Connection.TRANSACTION_READ_COMMITTED;
Connection.TRANSACTION_REPEATABLE_READ;
Connection.TRANSACTION_SERIALIZABLE。
四、 MySQL中的事务
MySQL中默认每一条SQL语句代表一个事务。但是如果一个事务中包含多个语句,那么需要进行开始事务和结束事务的操作。
我们以银行转账为例,
SELECT * FROM account1;
(1)事务的开始和提交操作:COMMIT
START TRANSACTION;
UPDATE account SET balance=balance-10000 WHERE id=1;
UPDATE account SET balance=balance+10000 WHERE id=2;
COMMIT;
(2)事务的回滚操作:ROLLBACK,执行完回滚操作后,此时的事务回滚至起点,即未进行操作。
START TRANSACTION;
UPDATE account SET balance=balance-10000 WHERE id=1;
UPDATE account SET balance=balance+10000 WHERE id=2;
ROLLBACK ;
标签:事务 相关 单位 tab code 包括 执行 实现 操作
原文地址:https://www.cnblogs.com/shengwangmei/p/9328398.html