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

2021-10-05 12:59:16 字數 1254 閱讀 7475

1、在該列上建立唯一值約束

-- 表名 約束名 列名,都不帶引號

alter table 表名 add constraint 約束名 unique (列名)

2、根據字段值要求(比如 年份後兩位+兩位月份+兩位天+當天的第幾條記錄(5位數,不足在左側補零)),寫乙個自增函式。

-- dbname01 資料庫名

-- generatecode 函式名

-- testtb01 表名

-- bizcode 列名

delimiter $$

use `dbname01`$$

drop function if exists `generatecode`$$

create definer=`root`@`localhost` function `generatecode`() returns varchar(50) charset utf8

begin

declare str varchar(50) default '';

set str=(select concat(substring(date_format(now(),'%y%m%d'),3),lpad(cast(substring((select max(bizcode) from testtb01),7) as signed)+1,4,0)));

return str;

end$$

delimiter ;

-- 記錄下用到的函式

-- substring 字串擷取函式

-- date_format 日期格式化

-- cast 型別轉化

-- lpad 「數值位數不足補零」

-- concat 字串拼接

3、建立觸發器,在每次新增一條記錄前,設定該字段的值來自自定義函式的值

create trigger before_insert_testtb01

before insert on testtb01

for each row

set new.bizcode = generatecode();

4、在插入資料時,不必設定該字段的值。大體思路就是這樣,函式裡只是乙個簡單的思路,考慮的並不全(沒取當天的最大記錄數。沒加判斷當天是否存在記錄,不存在時,最大值就是0。只能插入一條記錄,多條記錄時觸發器會設定這幾條的字段值一樣(違反唯一性約束))

5、雖然該欄位設定了唯一值約束,盡量別用它單做主鍵 。

jqGrid自定義某列資料的值

我們在使用grid的時候,經常遇到這樣的需求 1.某列在後台伺服器返回的值不是客戶友好的,需要做轉換 2.某錶查詢出來的某列,只是乙個id,還需要聯查別的表,以顯示使用者友好的資料。但是如何再顯示到前台的grid呢?以下是解決方案 1.通過設定colmodel options 的editoption...

資料庫中的自定義錶值函式

看到別人寫的函式,一開始看不懂,於是在網上找資料,原來是錶值函式,感覺又學到了,滿滿的充實感,摘錄如下 錶值函式 錶值函式和標量值函式的不同是 錶值函式是返回乙個table型別 table型別相當與一張儲存在記憶體中的一張虛擬表.錶值函式的語法 create function schema name...

SQLserver 資料庫自定義函式

最近專案開發上使用的sqlserver資料庫是2008版本,由於08版本的資料是沒有字串合併 string agg 這個函式 2017版本及以上支援 的,只有用stuff for xml path 來達到效果。所以才有萌生出了自定義聚合函式的想法。第一步新建專案 2008版本選擇 檔案 新建 專案 ...