MySQL(八) 事务-COMMIT/ROLLBACK

1.事务介绍

事务(transaction),需要在同一个处理单元中执行的一系列更新处理的集合,也就是说事务是多个DML语句的集合体,语法如下

BEGIN TRANSACTION/START TRANSACTION; #事务开始,不同DBMS不一样,SQL Server和PostgreSQL是BEGIN,MySQL是START,Oracle和DB2没有
    UPDATE sale SET sale_price=sale_price*0.9; #DML语句1
    INSERT INTO sale (
    product_name,
    product_type,
    sale_price,
    purchase_price,
    regist_date) values (
    
    '雪碧',
    '酒水',
    '10',
    '3',
    '2021-03-01'); #DML语句2
    DELETE FROM sale where product_type='酒水'; #DML语句3
COMMIT/ROLLBACK; #COMMIT提交处理,ROLLBACK回滚,取消DML语句的操作

ROLLBACK操作一定要在没有执行COMMIT的基础上实现,一旦COMMIT之后就不能再ROLLBACK了。在实际应用场景中我们并看不到COMMIT和ROLLBACK,连接上MySQL之后就可以直接进行操作,对数据库进行修改了,这是因为输入的DML语句在执行的时候被放在了BEGIN和COMMIT之间了,这种模式称为自动提交模式,每个SQL命令就是一个事物。

在执行DML的时候,并不会修改数据库数据,直到用户COMMIT或者ROLLBACK的时候才会产生数据变化的模式成为手动提交模式

2.事务的特性

事物的特性有四点,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称ACID。

2.1 Atomicity

事务中的多个DML语句必须全部执行正确,某个语句出错,整个事务都不会COMMIT,全部ROLLBACK,这样能够确保事务的完整性,在出现部分错误的时候能及时被用户获取到信息,不会出现用户以为全部执行了,其实只有部分执行的现象。

2.2 Consistency

指的是事务中的处理要满足数据库的约束限制,比如主键约束和NOT NULL等,如果插入违反约束规则的数据的时候会ROLLBAKC并不会COMMIT。

2.3 Isolation

指的是事务之间不会互相干扰,在事务中任何操作没有COMMIT之前,其他事务对该事务不可知。

2.4 Durability

在事务(包含COMMIT和ROLLBACK)结束后,DBMS能够保证该时间点的数据状态会被保存,即使由于系统故障导致数据丢失,数据库也能通过一定的手段进行恢复。最为常见的恢复手段就是将事务的执行记录保存到日志中,当发生故障时,可以从日志恢复到故障前状态。

3.事务实操

START TRANSACTION;
insert into sale (
    product_name,
    product_type,
    sale_price,
    purchase_price,
    regist_date) values (
    
    '雪碧',
    '酒水',
    '10',
    '3',
    '2021-03-01');
COMMIT;

执行START TRANSACTION和INSERT INTO语句,不执行COMMIT,可以发现在当前的MySQL的连接下查询的结果已经有新的数据行记录了,但是换一个连接就没有这个数据行记录。

下面执行COMMIT再在新的连接中查看,已经有酒水记录了,这样COMMIT是不是就很好理解了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇