[英]mysql stored procedure, select max value and insert the value and assign to variable
我正在將一個 MSSQL 存儲過程移植到 MYSQL 並且我有一個執行此操作的存儲過程。
通過 select Max 獲取表中的最后一個值。
將新值添加到表中(連同其他記錄
獲取最后一個值並將其存儲在變量中以供其他處理
到目前為止,我有以下內容
DECLARE lastSeq INT Default 0;
SELECT max(seq) INTO lastSeq from mytable;
Set newSeq = lastSeq + 1;
insert into mytable (seq, value1, value2, value3) values (newSeq, 1, 2, 3);
不幸的是,這不是線程安全的,比如說如果我 select max(seq) 然后運行不同查詢的其他線程添加了一條新記錄,當我到達插入時,該值已經是錯誤的。 在 MSSQL 中,我通過在查詢 max(seq) 期間鎖定表來做到這一點。
但
MYSQL 不允許在存儲過程中鎖定表,所以我不能直接移植該方法。 Havent 有幸在搜索時找到解決方案,也許我沒有在搜索中放置正確的關鍵字。
如何在 MYSQL 線程安全的存儲過程中執行此操作?
更新:我不能為此列使用 auto_increment,因為該列不是唯一的,我們允許重復,也許我的示例是錯誤的,因為我使用了應該是自動遞增的“序列”,但在我的真實代碼中,我將它用於不同的列允許重復。
例子;
record id userid name seq status
1 1 adam 1 A
2 1 adam 2 C
3 2 Bob 1 C
在上面的記錄中,我們有 2 條 Adam 記錄,但只有一個有效設置為“C”作為當前值,“A”作為存檔或舊值。 所以我的表有 2 條有效記錄,
這是一個有點長的評論。
所以將數據類型更改為auto_increment
。 當數據庫基本上為您完成時,無需在觸發器中重新實現此邏輯。
如果您擔心差距,那么在查詢表時只需使用row_number() over (order by seq)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.