標籤:src 警告 now() llb 資料完整性 val name RoCE create
事務用於將某些操作的多個SQL作為原子性操作,一旦有某一個出現錯誤,即可復原到原來的狀態,從而保證資料庫資料完整性。舉例說明:
create table user2(id int primary key auto_increment,name char(32),balance int);insert into user2(name,balance)values(‘wsb‘,1000),(‘egon‘,1000),(‘ysb‘,1000);#出現異常,復原到初始狀態start transaction;update user2 set balance=900 where name=‘wsb‘; #買支付100元update user2 set balance=1010 where name=‘egon‘; #中介拿走10元uppdate user2 set balance=1090 where name=‘ysb‘; #賣家拿到90元,出現異常沒有拿到rollback;mysql> select * from user;+----+------+---------+| id | name | balance |+----+------+---------+| 1 | wsb | 1000 || 2 | egon | 1000 || 3 | ysb | 1000 |+----+------+---------+rows in set (0.00 sec)#原子操作start transaction;update user2 set balance=900 where name=‘wsb‘; #買支付100元update user2 set balance=1010 where name=‘egon‘; #中介拿走10元update user2 set balance=1090 where name=‘ysb‘; #賣家拿到90元commit;
下面是操作:當ip_return_code為1時,表示異常,立馬復原。當為2時,出現警告,立馬復原原始狀態。0表示成功
delimiter //create PROCEDURE b6( OUT p_return_code tinyint)BEGIN DECLARE exit handler for sqlexception BEGIN -- ERROR set p_return_code = 1; rollback; END; DECLARE exit handler for sqlwarning BEGIN -- WARNING set p_return_code = 2; rollback; END; START TRANSACTION; insert into blog(name,sub_time) values(‘yyy‘,now()); COMMIT; -- SUCCESS set p_return_code = 0; #0代表執行成功END //delimiter ;set @res=123;call b6(@res);select @res;
select @res時返回0表示成功執行插入。此時,查詢可以看到yyy已經成功插入blog表中
MySQL之事務