MySQL事务(transaction)

为什么要引入事务的概念:

假设有一个银行数据库,其中包含用户账户信息和账户余额。用户可以执行存款和取款操作。如果没有事务的支持,以下情况可能会发生问题:

并发问题: 假设有两个用户同时尝试从同一个账户中取款,而账户余额只有足够一次取款的钱。如果不使用事务,两个操作可能会交叉执行,导致账户透支。
操作失败问题: 假设用户执行了存款和取款操作,但在存款后发生了错误导致取款操作失败。如果没有事务支持,存款操作会保留,账户余额将不正确,用户的资金可能会丢失。

通过引入事务,以上问题可以得到解决。例如,用户执行存款和取款操作时,这两个操作会被包装在一个事务中。如果取款操作失败,整个事务会被回滚,包括之前的存款操作,确保账户余额的一致性。如果所有操作都成功,事务会被提交,账户余额更新。

事务(Transaction)是一组操作的集合,他是不可分割的工作单位。事物会把所有操作视为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败

默认MySQL的事务是自动提交的,也就是说,当执行一个DML语句,MySQL会立即隐式的提交实物。

开启事务:start transaction;/begin;
提交事务:commit;
回滚事务:rollback;

事务四大特性:

原子性(AStomicity):事务是不可分割的最小单元,要么全部成功,要么全部失败
一致性(Consistency):事务完成时,所有数据都必须保存一致的状态;
隔离性(Isolaction):各个事务的操作相互隔离,一个事务的操作在提交之前对其他事务是不可见的。这确保了并发事务的执行不会相互干扰。
持久性(Durabiliy):事务一旦提交或回滚,它对数据库中的数据改变就是持久的。

-- 开始事务
START TRANSACTION;

-- 减少转出账户余额
UPDATE accounts
SET balance = balance - 100
WHERE account_id = 1;

-- 增加转入账户余额
UPDATE accounts
SET balance = balance + 100
WHERE account_id = 2;

-- 提交事务
COMMIT;

你可能感兴趣的:(JAVA后端,mysql,adb,android)