Mysql-事務,原子性操作


事物分為 自動(默認的)和手動(需開啟事務)兩種

--
事務 start transaction; -- commite; 提交事務 -- rollback; 回滾事務
create table if not exists account(
    id int primary key auto_increment,
    name varchar(14) not null,
    RMB int
);

insert into account(name,RMB) values('Which',1000),('Tj',998);

 

rollback; 進行一步操作后,可以撤回這個操作

-- 開始事務    手動事物

start transaction;

-- 事物操作
update account set RMB =RMB-992 where name = 'Which';
-- \q  退出mysql(中斷事務)
-- mysql -u name -p;  回到mysql   
-- 繼續事務操作
    -- 回滾事務
    rollback;
+----+-------+------+   -- insert
| id | name  | RMB  |
+----+-------+------+
|  1 | Which |    8 |
|  2 | Tj    |  998 |
+----+-------+------+ 
-- update  |
--+-------+------+
| id | name  | RMB  |
+----+-------+------+
|  1 | Which |    8 |
|  2 | Tj    |  998 |
+----+-------+------+
-- rollback | +----+-------+------+ | id | name | RMB | +----+-------+------+ | 1 | Which | 8 | | 2 | Tj | 998 | +----+-------+------+

 

 

commite:   自動提交

 

-- 事物操作
update account set RMB =RMB-992 where name = 'Which';
-- \q  退出mysql(事務)
-- mysql -u name -p;  回到mysql
-- 實際上在這兒退出后,再回到account表,值並沒有-992,但是再進行下一步操作后,992就轉給Tj了。
 -- 繼續事務操作 update account set RMB =RMB+992 where name = 'Tj';
-- insert   Which 1000,Tj 998
+----+-------+------+
| id | name  | RMB  |
+----+-------+------+
|  1 | Which | 1000 |
|  2 | Tj    |  998 |
+----+-------+------+
-- update   Which-992
+----+-------+------+
| id | name  | RMB  |
+----+-------+------+
|  1 | Which |    8 |
|  2 | Tj    |  998 |
+----+-------+------+
-- update   Tj+992
+----+-------+------+
| id | name  | RMB  |
+----+-------+------+
|  1 | Which |    8    |
|  2 | Tj       | 1990  |
+----+-------+------+

原子性操作:Innodb引擎支持事務

要么全部成功,要么全部失敗 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM