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版本選擇 檔案 新建 專案 ...