17 mysql內建功能 事物

2021-09-10 16:55:45 字數 2277 閱讀 9897

事務用於將某些操作的多個sql作為原子性操作,一旦有某乙個出現錯誤,即可回滾到原來的狀態,從而保證資料庫資料完整性。

create table user(

id int primary key auto_increment,

name char(32),

balance int

);insert into user(name,balance)

values

('wsb',1000),

('egon',1000),

('ysb',1000);

#原子操作

start transaction;

update user set balance=900 where name='wsb'; #買支付100元

update user set balance=1010 where name='egon'; #中介拿走10元

update user set balance=1090 where name='ysb'; #賣家拿到90元

commit;

#出現異常,回滾到初始狀態

start transaction;

update user set balance=900 where name='wsb'; #買支付100元

update user set balance=1010 where name='egon'; #中介拿走10元

uppdate user set balance=1090 where name='ysb'; #賣家拿到90元,出現異常沒有拿到

rollback;

commit;

mysql> select * from user;

+----+------+---------+

| id | name | balance |

+----+------+---------+

| 1 | wsb | 1000 |

| 2 | egon | 1000 |

| 3 | ysb | 1000 |

+----+------+---------+

rows in set (0.00 sec)

#介紹

delimiter //

create procedure p4(

out status int

)begin

1. 宣告如果出現異常則執行

開始事務

-- 由秦兵賬戶減去100

-- 方少偉賬戶加90

-- 張根賬戶加10

commit;

結束set status = 2;

end //

delimiter ;

#實現delimiter //

create procedure p5(

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;

delete from tb1; #執行失敗

insert into blog(name,sub_time) values('yyy',now());

commit;

-- success

set p_return_code = 0; #0代表執行成功

end //

delimiter ;

#在mysql中呼叫儲存過程

set @res=123;

call p5(@res);

select @res;

#在python中基於pymysql呼叫儲存過程

cursor.callproc('p5',(123,))

print(cursor.fetchall()) #查詢select的查詢結果

cursor.execute('select @_p5_0;')

print(cursor.fetchall())

事務

17 MySQL的小技巧

1.正規表示式的使用 在字串開始處進行匹配 在字串末尾處進行匹配 匹配任意單個字元,包括換行符 匹配出括號內的任意字元 匹配不出括號內的任意字元 a 匹配零個或多個a 包括空串 a 匹配1個或多個a 不包括空串 a?匹配1個或0個a a1 a2 匹配a1或a2 a m 匹配m個a a m,匹配m個或...

17 MySQL變數 宣告與賦值

變數 可在儲存程式 儲存過程和函式 中使用變數 變數作用域 在儲存程式中的begin.end間 1 mysql變數 宣告 declare varname varname2.type default value declare宣告關鍵字 varname varname2 變數名 可多個變數同時宣告 t...

mysql整理17 MySQL行轉列實現方式總結

建立表 create tabletb cname varchar 10 cource varchar 10 score int engine innodb 插入資料 insert into tb values 張三 語文 74 insert into tb values 張三 數學 83 inser...