mysql實現自增函數


這兩天在思考怎么生成數據庫隨機名稱,思前想后覺得還是利用自增的邏輯主鍵是最方便快捷的,於是便嘗試着獲取一種自增的mysql函數

自增mysql函數

 1 BEGIN
 2 DECLARE id INT DEFAULT 0;
 3 SELECT cuid + 1 INTO id from uc_gen_number where table_key = tableKey for update;
 4 IF id = 0 THEN 
 5 SET id = 1;
 6 INSERT INTO uc_gen_number (table_key, cuid) VALUES (tableKey, id);
 7 ELSE UPDATE uc_gen_number SET cuid = id where table_key = tableKey;
 8 END IF;
 9 RETURN id;
10 END

查資料的時候看到了這個函數,覺得真的是刷新了我的三觀,之前一直認為select出的結果集是不能夠賦值給其他的,因為考慮畢竟是一個集合,但是今天發現卻可以,只要保證結果集只有一條。

 

自己嘗試着驗證了這個原理:

update User set FSerialID=(select FSerialId from (select FSerialId from User ORDER BY FSerialId desc limit 1) a) where FSerialId=(select FSerialId from (select FSerialId from User ORDER BY FSerialId asc limit 1) b)

沒想到真的可以。如果把select FSerialId from (select FSerialId from UserInfo ORDER BY FSerialId desc limit 1) a 這句直接改成select FSerialId from UserInfo ORDER BY FSerialId desc limit 1。會報錯You can't specify target table <tbl> for update in FROM clause.錯誤的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM