程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySlq創建定長字符串主鍵,使用觸發器

MySlq創建定長字符串主鍵,使用觸發器

編輯:MySQL綜合教程


MySlq創建定長字符串主鍵,使用觸發器   因為想讓目錄的主鍵整齊好用,所以使用定長的字符串做主鍵,在表為空和只有一個數據的時候LAST_INSERT_ID()方法獲取的值都是1,所以在觸發器裡做了判斷   drop table  if exists tb_cate; create table tb_cate( id char(5) primary key DEFAULT '' COMMENT '目錄編號,5位數字,高位補0,從00001開始,每次遞增1,由序列和觸發器控制',  www.2cto.com   type char(1) default 0 COMMENT '目錄類型,備用,可以設置共享目錄等', name varchar(40) not null COMMENT '目錄名稱', `describe` varchar(200) COMMENT '目錄描述', code varchar(30) not null COMMENT '目錄完整編碼,例如0000100002,不包含自身',
  parent char(5) COMMENT '上級目錄', lev char(1) default 0 COMMENT '目錄等級,默認0級', create_user int(10) default 0 COMMENT '目錄創建人,默認0為系統創建', update_user int(10) default 0 COMMENT '目錄最後修改人,默認0為系統創建', createtime datetime COMMENT '目錄創建時間', updatetiem datetime COMMENT '目錄最後修改時間', increc_id  int unique auto_increment COMMENT '只為實現觸發器使用的字段,實體中不需要映射此字段' );   delimiter // #必須有的 CREATE TRIGGER tb_cate_createid before insert ON tb_cate FOR EACH ROW BEGIN select count(increc_id) from tb_cate into @inid;#判斷表是否為空 if @inid=0 then  www.2cto.com   set new.id = SUBSTRING(concat('00000',cast(LAST_INSERT_ID() as char)),(char_length(concat('00000',cast(LAST_INSERT_ID() as char)))-4)); else set new.id = SUBSTRING(concat('00000',cast(LAST_INSERT_ID()+1 as char)),(char_length(concat('00000',cast(LAST_INSERT_ID()+1 as char)))-4)); end if; END; // delimiter ; #必須有的   #下面是第二種方法,第一種方法在Mysql Workbench中測試有問題,第二種方法沒有問題,都還沒有在java中測試  delimiter // #必須有的   CREATE TRIGGER tb_cate_createId before insert ON tb_cate FOR EACH ROW BEGIN   select count(increc_id) from tb_cate into @inid; if @inid=0 then  www.2cto.com   set new.id = SUBSTRING(concat('00000000000000000000',cast(1 as char)),(char_length(concat('00000000000000000000',cast(1 as char)))-19)); else select max(increc_id) from tb_cate into @maxid; set new.id = SUBSTRING(concat('00000000000000000000',cast(@maxid+1 as char)),(char_length(concat('00000000000000000000',cast(@maxid+1 as char)))-19)); end if; END;   // delimiter ; #必須有的
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved