事物分為 自動(默認的)和手動(需開啟事務)兩種
-- 事務 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引擎支持事務
要么全部成功,要么全部失敗