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鎖。
如果會話正常或異常終止,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事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu 禁用透明大页_如何在ubu
- 下一篇: 解决Android studio 的Gl