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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql事务编号_Mysql事务

發布時間:2024/7/23 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql事务编号_Mysql事务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:mysql事務

1.需求

從orders表中查詢最新的銷售訂單編號,并使用下一個銷售訂單編號作為新的銷售訂單編號。

在指定客戶的orders表中插入新的銷售訂單。

將新的銷售訂單項目插入orderdetails表中。

從orders表和orderdetails中獲取數據以確認更改。

如果由于數據庫故障而導致上述一個或多個步驟失敗,那么數據會發生什么? 如果將訂單項添加到orderdetails表中的步驟失敗,系統中將會有空的銷售訂單(只有訂單號,不知道這個訂單賣了什么)。

2.介紹

要啟動事務,請使用START TRANSACTION語句。要撤消MySQL語句執行,請使用ROLLBACK語句。

請注意,有一些SQL語句,主要是數據定義語句,不能在事務中使用以下語句:

要將更改寫入事務中的數據庫,請使用COMMIT語句。要注意的是,默認情況下,MySQL自動提交對數據庫的更改。

要強制MySQL不會自動提交更改,請使用以下語句:

3.需求的步驟

使用START TRANSACTION語句啟動事務。

從orders表中獲取最新的銷售訂單編號,并使用下一個銷售訂單編號作為新的銷售訂單編號。

在指定orders表中插入新的銷售訂單。

將新的銷售訂單項目插入orderdetails表中。

使用COMMIT語句提交更改。

從orders表和orderdetails表中獲取數據以確認更改。

4.sql

1 --start a new transaction

2 start transaction;3

4 --get latest order number

5 select @orderNumber := max(orderNUmber)6 fromorders;7 --set new order number

8 set @orderNumber = @orderNumber + 1;9

10 --insert a new order for customer 145

11 insert intoorders(orderNumber,12 orderDate,13 requiredDate,14 shippedDate,15 status,16 customerNumber)17 values(@orderNumber,18 now(),19 date_add(now(), INTERVAL 5 DAY),20 date_add(now(), INTERVAL 2 DAY),21 'In Process',22 145);23 --insert 2 order line items

24 insert intoorderdetails(orderNumber,25 productCode,26 quantityOrdered,27 priceEach,28 orderLineNumber)29 values(@orderNumber,'S18_1749', 30, '136', 1),30 (@orderNumber,'S18_2248', 50, '55.09', 2);31 --commit changes

32 commit;33

34 --get the new inserted order

35 select * fromorders a36 inner join orderdetails b on a.ordernumber =b.ordernumber37 where a.ordernumber = @ordernumber;

5.效果

二:表鎖定

1.介紹

使用MySQL鎖來協調會話之間的表訪問。

MySQL允許客戶端會話明確獲取表鎖,以防止其他會話在特定時間段內訪問表??蛻舳藭捴荒転樽约韩@取或釋放表鎖。它不能獲取或釋放其他會話的表鎖。

2.準備數據

3.lock與unlock語法

lock:

可將表的名稱放在LOCK TABLES關鍵字后面,后跟一個鎖類型。 MySQL提供兩種鎖類型:READ和WRITE。 我們將在下一節詳細介紹這兩種鎖類型。

unlock:

這個是要釋放表的鎖。

4.read類型

功能:

同時可以通過多個會話獲取表的READ鎖。此外,其他會話可以從表中讀取數據,而無需獲取鎖定。

持有READ鎖的會話只能從表中讀取數據,但不能寫入。此外,其他會話在釋放READ鎖之前無法將數據寫入表中。來自另一個會話的寫操作將被放入等待狀態,直到釋放READ鎖。

如果會話正?;虍惓=K止,MySQL將會隱式釋放所有鎖。這也與WRITE鎖相關。

示例:

A:獲取connection_id

B:插入一行數據

INSERT INTO tbl(col) VALUES(10);

C:獲取鎖,并添加數據

LOCK TABLE tbl READ;

INSERT INTO tbl(col) VALUES(11);

會報錯,因為這個時候不可以添加數據。

D:打開另一個會話,查看Id

E:插入數據

F:查看詳細 信息

G:返回第一個會話,釋放read鎖

5.write類型

功能:

只有擁有表鎖定的會話才能從表讀取和寫入數據。

在釋放WRITE鎖之前,其他會話不能從表中讀寫。

示例:

A:獲取鎖,并插入數據

這時,去其他會話進行查詢數據:

不能讀寫。

B:回到會話一釋放鎖

UNLOCK TABLES;

C:進入會話二進行操作

這時可以進行讀寫操作,剛才被鎖住的查詢可以繼續執行。

總結

以上是生活随笔為你收集整理的mysql事务编号_Mysql事务的全部內容,希望文章能夠幫你解決所遇到的問題。

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