mysql實現自增函式

2022-05-05 08:36:10 字數 1157 閱讀 3275

這兩天在思考怎麼生成資料庫隨機名稱,思前想後覺得還是利用自增的邏輯主鍵是最方便快捷的,於是便嘗試著獲取一種自增的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;

8end if;

9return 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 for update in from clause.錯誤的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中)。

MySQL 實現自增函式sequence

當前資料庫為 mysql 由於mysql和oracle不太一樣,不支援直接的sequence,所以需要建立一張table來模擬sequence的功能,理由sql語句如下 create table sequence name varchar 50 collate utf8 bin not null c...

ORACLE自增函式,一般函式

1.oracle先建立函式方法,再直接使用,mysql直接使用方法unix timestamp,from unixtime oracle to unix create date create orreplace function oracle to unix in date in date retu...

資料庫表的某列的自定義自增函式(mysql)

1 在該列上建立唯一值約束 表名 約束名 列名,都不帶引號 alter table 表名 add constraint 約束名 unique 列名 2 根據字段值要求 比如 年份後兩位 兩位月份 兩位天 當天的第幾條記錄 5位數,不足在左側補零 寫乙個自增函式。dbname01 資料庫名 gener...