日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql数据库之事务与存储过程

發布時間:2023/12/10 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据库之事务与存储过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事務

什么是事務?

  事務是指一些SQL語句的集合,這些語句同時執行成功完成某項功能

事務的CAID特性:

  原子性:一個事務的執行是整體性的,要么內部所有語句都執行成功,要么一個都別想成功

  一致性:事務必須使數據庫從一個一致性狀態變到另一個一致性狀態。

  隔離性:一個事務的執行不可以被其他事務干擾,一個事物內部語句執行不受并發的其他操作影響,彼此相互隔離。

  持久性:事務的提交對數據庫的改變是永久性的,不受外部因素或其他操作影響

事務的語法規則:

create table user(id int primary key auto_increment,name char(32),balance int);insert into user(name,balance) values("zhangsan",1000),("lisi",1000),("wangwu",1000);# 下面產生事務操作start transactionupdate user set balance = 900 where name = "zhangsan"; # 買家支付100元update user set balance = 1010 where name = "lisi"; # 中介拿10元抽成update user set balance = 1090 where name = "wangwu"; # 商家得90元rollback; # 事務回滾# 開啟事務之后,只要沒有執行commit操作,數據其實都沒有真正刷新到硬盤 commit; #開啟事務檢測操作是否完整,不完整主動回滾到上一個狀態,如果完整就應該執行commit操作

?

?

存儲過程

概念:存儲過程包含一堆sql語句,可以通過對存儲過程的名字來調用執行內部語句,類似于其他編程語言中的函數

存儲過程的

三種開發模型:

第一種:

    應用程序:只需要開發應用程序的邏輯

    mysql:事先編寫好存儲過程,供應用程序隨時調用

    優點:開發效率和執行效率高

    缺點:人為因素較多,跨部門溝通等,擴展性較差

第二種:  

    應用程序:除了要開發應用程序邏輯,還需要編寫原生的sql語句

    優點:擴展性較高,都根據mysql語法規則來編寫sql語句即可

    缺點:編寫原生sql語句十分復雜,并且要考慮到sql語句優化的問題,這就導致了開發效率和執行效率降低的問題

第三種:

    應用程序:只考慮應用程序的邏輯,不需要管SQL語句的實現,基于第三方的工具和庫

    優點:開發效率高,直接調用已封裝好的功能和方法就好,有更好的兼容性

    缺點:執行效率比較低,執行效率不如第二種

  

?

如何創建存儲過程:

# 存儲過程在那個庫下創建即在哪個庫下面生效,不是全局的# 1、直接在mysql中調用 set @res=10 # res的值是用來判斷存儲過程是否被執行成功的依據,所以需要先定義一個變量@res存儲10 call p1(2,4,10); # 報錯 call p1(2,4,@res);# 查看結果 select @res; # 執行成功,@res變量值發生了變化# 2、在python程序中調用 pymysql鏈接mysql 產生的游表cursor.callproc('p1',(2,4,10)) # 內部原理:@_p1_0=2,@_p1_1=4,@_p1_2=10; cursor.excute('select @_p1_2;')# 3、存儲過程與事務使用舉例(了解) delimiter // create PROCEDURE p5( OUT p_return_code tinyint ) BEGIN   DECLARE exit handler for sqlexceptionBEGIN-- ERRORset p_return_code = 1;rollback;END;DECLARE exit handler for sqlwarningBEGIN-- WARNINGset p_return_code = 2;rollback;END;START TRANSACTION;update user set balance=900 where id =1;     pdate user123 set balance=1010 where id = 2;     pdate user set balance=1090 where id =3;COMMIT;-- SUCCESSset p_return_code = 0; #0代表執行成功END // delimiter ;

?

轉載于:https://www.cnblogs.com/dongxixi/p/10885250.html

總結

以上是生活随笔為你收集整理的mysql数据库之事务与存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。