mysql 儲存過程與事務

2022-08-24 21:48:13 字數 861 閱讀 3284

最近在工作中要實現乙個功能,在乙個php檔案裡有乙個流水號的變數,每次執行這個php的檔案,這個流水號的變數都得不一樣,我就想到用mysql的自增來解決,我寫了乙個儲存過程,

create procedure mqsearch(in userid int, in type int, out lshs bigint)

begin

insert into `sztv_mq_search` (`user_id`, `time`, `type`) values (userid, now(), type);

select id into lshs from `sztv_mq_search` order by `id` desc limit 1;

select lshs;

end為了寫這個儲存過程,我去查了很多資料,包括儲存過程與事務,。下面是我關於事務的理解。

事務是一串sql語句,這些語句要不一起執行成功,要不就失敗,但沒有等待功能。

兩個使用者同時執行我上面的儲存過程,a使用者執行了insert語句,b使用者會接著執行insert語句,而不會等待a使用者執行select語句,這樣就會出現乙個問題,

假如開始最大id是2,a使用者執行了insert語句後,最大id變成了2,b使用者執行了insert語句,最大id變成了3,a使用者執行select語句,獲取的最大id就變成了3,這不是我要的結果,應此我就把select語句改成了這樣

select last_insert_id() into lshs;

總結:儲存過程和事務只是保證所有sql語句執行成功,但不能使b事務等待a事務的sql語句全部執行完成後在開始執行

last_insert_id只跟連線有關,有多少的使用者執行**,就開啟多少個連線,就有多少個對應的last_insert_id

事務與儲存過程

1 事務的概念 就是為了防止任意一條資料出現異常的情況下沒有執行,則導致兩個賬戶的金額不同步造成錯誤的情況下,所謂的事務就是針對資料庫的一組操作,他可以有一條或者多條語句組成,同乙個事務操作具備同步性。也就是說,事務中的語句要麼就執行,要麼都不執行。在資料庫使用事務的時候,我們就是要開啟事務 1 s...

mysql的儲存過程與事務入門

儲存過程是 通過一系列的sql語句,根據傳入的引數 也可以沒有 通過簡單的呼叫,完成比單個sql語句更複雜的功能,儲存在資料庫伺服器端,只需要編譯過一次之後再次使用都不需要再進行編譯。主要對儲存的過程進行控制。事務是一系列的資料更改操作組成的乙個整體。一旦事務中包含的某操作失敗或使用者中止,使用者可...

MySQL儲存過程 事務transaction

mysql 中,單個 store procedure sp 不是原子操作,而 oracle 則是原子的。如下的儲存過程,即使語句2 失敗,語句 1 仍然會被 commit 到資料庫中 sql view plain copy create table testproc id int 4 primary...