MySQL varchar型別自動遞增

2021-09-25 04:24:23 字數 1900 閱讀 2183

delimiter $$

create

/*[definer = ]*/

trigger `ce`.`myt` before insert

on `ce`.`my3`

for each row begin

set  new.id = concat('ck',lpad(((select substring(id,3,8)  from  my3 where id = (select id from  my3  order by substring(id,3,6)  desc limit 1))+1),4,0)); 

end$$

delimiter ;

delimiter $$

實現初始化為ck1000

use `ce`$$

/*字串拼接數字。實現數字的自增

*/drop trigger /*!50032 if exists */ `my3`$$

create

/*!50017 definer = 'root'@'localhost' */

trigger `my3` before insert on `my3` 

for each row begin

set new.id = ifnull(concat('ck',lpad(((select substring(id,3,8)  from  my3 where id = (select id from  my3  order by substring(id,3,6)  desc limit 1))+1),4,0)),"ck1000");

end;

$$delimiter ;

因為使用者表中使用者編號不是int型別,想實現自動自增功能,使用內建的方法肯定是行不通的,所以,使用了複雜的查詢方法及拼接方式,

此方法雖然比較笨,但還是可以執行的的。

採用觸發器方式,詳細思路:

1、使用查詢語句查出表中最後一條資料的id:

select user_no from user order by user_no desc limit 1

2、使用substring函式擷取最後一條bh-******xx中數字部分:

select substring(user_no,4,8) from user where user_no=(select user_no from user order by user_no desc limit 1)

上面的意思是從第4位開始擷取,截到第8位

3、使用concat語句進行字串連線:

concat('bh-',(select substring(user_no,4,8) from user where user_no=(select user_no from user order by user_no desc limit 1) +1));

這裡需要注意:我一開始認為只要在結果上 +1,然後拼接就行了,其實實際上並不是我想象中的 bh-00000002,而是bh-2,所以,這裡採用lpad函式進行優化,結果如下:

concat('bh-',lpad(((select substring(user_no,4,8 from user where user_no=(select user_no from user order by user_no desc limit 1))+1),8,0));

然後,完整的**如下:

create trigger `t` before insert on `user`

for each row begin

set new.user_no=concat('bh-',lpad(((select substring(user_no,4,8 from user where user_no=(select user_no from user order by user_no desc limit 1))+1),8,0));

end;

mysql varchar最大長度

mysql中varchar最多能儲存65535個位元組的bai資料。du varchar 的最大長度受限於最大行zhi長度 max row size,65535bytes 65535並不是乙個很精確的上限,可dao以繼續縮小這個上限。65535個位元組包括所有欄位的長度,變長字段的長度標識 每個變長...

MySQL Varchar的新認識

mysql中的char,varvhar以及text型別一直是需要被搞清楚的一回事,他們之間的大致的區別在網上都有。我查了以後發現對於varchar,網上說的是最大長度為65535個位元組 網上說mysql5.0.3之後才有,5.0.3之前varchar的最大值並沒有那麼大,這個說法我並沒有去求證 於...

mysql varchar最大的長度

a 儲存限制 varchar 欄位是將實際內容單獨儲存在聚簇索引之外,內容開頭用1到2個位元組表示實際長度 長度超過255時需要2個位元組 因此最大長度不能超過65535 2的16次方 1 b 編碼長度限制 字元型別若為gbk,每個字元最多佔2個位元組,最大長度不能超過32766 字元型別若為utf...