国产福利在线播放|久久精品福利网站免费|国产呻吟视频在线观看|日韩一区二区三区免费高清|久996视频精品免费观看|欧美日本在线一区二区三区|在线最新无码经典无码免費資訊|国产午夜亚洲精品国产成人最大

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補(bǔ)償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

MySQL 運(yùn)用存儲過程實現(xiàn)主鍵生成

發(fā)布時間:  2012/7/27 17:24:24

寫了一個根據(jù)當(dāng)天日期生成序列號主鍵的一個procedure,規(guī)則為:當(dāng)天的日期加上序列號,如20120604002,表明是2012年06月04號的第2單。

具體的時間方式是通過表的策略來生成的。

生成一張管理表(用于多種主鍵生成)

1.create table sysOption (  
2.  keyName varchar(255),  
3.  value varchar(255),  
4.  time timestamp  
5.); 
然后就是使用存儲過程(結(jié)合游標(biāo)的方式) 來生成主鍵了,如下 :

1.drop procedure if exists genRecordNum;    
2.  
3.delimiter //  
4.CREATE PROCEDURE genRecordNum()  
5.BEGIN  
6.  declare rn varchar(255) default null;  
7.  declare v_value varchar(255) default null;  
8.  declare v_time timestamp default null;  
9.    
10.  DECLARE hasResult INTEGER DEFAULT 1;  
11.    
12.  declare genCursor CURSOR FOR select value, time from sysOption where keyName='genRecordNum';   
13.  declare CONTINUE HANDLER FOR SQLSTATE '02000' SET hasResult = 0;   
14.    
15.  OPEN genCursor;  
16.  FETCH genCursor INTO v_value, v_time;    
17.  CLOSE genCursor;  
18.  
19.    
20.  if hasResult=0 then   
21.       insert into sysOption values('genRecordNum', '1', now());  
22.       set rn = CONCAT(date_format(now(), '%Y%m%d'), lpad('1', 3, '0')) ;  
23.  else  
24.        if date_format(v_time, '%Y%m%d')!=date_format(now(), '%Y%m%d') then  
25.            update sysOption set value='1', time = now();  
26.            set rn = CONCAT(date_format(now(), '%Y%m%d'), lpad('1', 3, '0')) ;  
27.        else  
28.            update sysOption set value=1+v_value;  
29.            set rn = CONCAT(date_format(now(), '%Y%m%d'), lpad(1+v_value, 3, '0')) ;  
30.        end if;  
31.  end if;     
32.    
33.  select rn recordNum;  
34.END;//  
35.delimiter ; 
存儲過程的理解:

1. 創(chuàng)建游標(biāo),用于查詢表中相應(yīng)的記錄。hasResult表示表中是否有記錄(如果沒有查到記錄,數(shù)據(jù)庫拋出“02000”號錯誤,這是設(shè)置hasResult為0)

1.declare genCursor CURSOR FOR select value, time from sysOption where keyName='genRecordNum';   
2.declare CONTINUE HANDLER FOR SQLSTATE '02000' SET hasResult = 0;  
2. 執(zhí)行數(shù)據(jù)庫操作,如果沒有記錄,則直接插入數(shù)據(jù)庫,并返回當(dāng)前編號,如20120604001;

1.if hasResult=0 then   
2.   insert into sysOption values('genRecordNum', '1', now());  
3.   set rn = CONCAT(date_format(now(), '%Y%m%d'), lpad('1', 3, '0')) ;  3. 如果數(shù)據(jù)庫有記錄,則判斷日期是否為今天,如果不是今天的,則更新時間為今天,并返回今天的第一個編號,如20120604001;
1.if date_format(v_time, '%Y%m%d')!=date_format(now(), '%Y%m%d') then  
2.            update sysOption set value='1', time = now();  
3.            set rn = CONCAT(date_format(now(), '%Y%m%d'), lpad('1', 3, '0')) ;  4. 如果今天已經(jīng)有編號生成過了,那直接在原編號的基礎(chǔ)上加1,更新數(shù)據(jù)庫,然后返回編號,如20120604002:
1.else  
2.            update sysOption set value=1+v_value;  
3.            set rn = CONCAT(date_format(now(), '%Y%m%d'), lpad(1+v_value, 3, '0')) ; 
 


本文出自:億恩科技【www.riomediacenter.com】

服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時售后服務(wù)電話:0371-60135900
  • 虛擬主機(jī)/智能建站 24小時售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務(wù)熱線