数据的事务操作及应用场景

事务是⼀个原⼦操作。是⼀个⼩执⾏单元。可以由⼀个或多个SQL语句组成,在 同⼀个事务当中,所有的SQL语句都成功执⾏时,整 个事务成功,有⼀个SQL语 句执⾏失败,整个事务都执⾏失败。

在某些场景下,一次完整的业务逻辑可能需要多次对数据库数据进行操作,而这些操作中可能在某一环节出错从而导致整个业务出错,这时候就要及时补救,回退到业务的最初。

使用事务的例子

#A 账户转账给 B 账户 1000 元。
#A 账户减1000 元 
UPDATE account SET MONEY = MONEY-1000 WHERE id=1; 
#断电、异常、出错...
#B 账户加 1000 元 
UPDATE account SET MONEY = MONEY+1000 WHERE id=2; 
上述代码在减操作后过程中出现了异常或加钱语句出错,会发现,减钱仍旧是成功的,⽽加钱失败了! 
注意:每条SQL语句都是⼀个独⽴的操作,⼀个操作执⾏完对数据库是永久性的影响

边界:
开始:连接到数据库,执⾏⼀条DML语句。 上⼀个事务结束后,⼜输⼊了⼀条 DML语句,即事务的开始
结束:
1). 提交:
a. 显示提交:commit;
b. 隐式提交:⼀条创建、删除的语句,正常退出(客户端退出连接)
2). 回滚:
a. 显示回滚:rollback;
b. 隐式回滚:⾮正常退出(断电、宕机),执⾏了创建、删除的语 句,但是失败了,会为这个⽆效的语句执⾏回滚.
原理:
数据库会为每⼀个客户端都维护⼀个空间独⽴的缓存区(回滚段),⼀个事务中所 有的增删改语句的执⾏结果都会缓存在回滚段中,只有 当事务中所有SQL 语句 均正常结束(commit),才会将回滚段中的数据同步到数据库。否则⽆论因为 哪种原因失败,整个事务将回滚 (rollback)。
特性:
Atomicity(原⼦性)
    表示⼀个事务内的所有操作是⼀个整体,要么全部成功,要么全部失败
Consistency(⼀致性)
    表示⼀个事务内有⼀操作失败时,所有改过的数据都必须回滚到修改前状态
Isolation(隔离性)
    事务查看数据操作时数据所处的状态,要么是另⼀并发事务修改它之前的状 态,要么是另⼀事务修改它之后的状态,事务不 会查看中间状态的数据。
Durability(持久性)
    持久性事务完成之后,它对于系统的影响是永久性的。
应用:
#A 账户给 B 账户转账。
#1.开启事务 #开启⾃动提交setAutoCommit=1;
START TRANSACTION; |setAutoCommit=0;#禁⽌⾃动提交
#2.事务内数据操作语句
UPDATE account SET MONEY = MONEY-1000 WHERE ID = 1; UPDATE account SET MONEY = MONEY+1000 WHERE ID = 2;
#3.事务内语句都成功了,执⾏ COMMIT;
COMMIT;
#4.事务内如果出现错误,执⾏ ROLLBACK;
ROLLBACK;
【注意】:开启事务后,执⾏的语句均属于当前事务,成功再执⾏ COMIIT,失 败要进⾏ ROLLBACK

你可能感兴趣的:(数据库,sql)