国产欧美一区二区精品行性色_91精品午夜在线观看_亚洲精品无码激情国产_91精品啪在线观看国产城中村_91看片国产一区二区色欲

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

MySQL 運(yùn)用存儲(chǔ)過(guò)程實(shí)現(xiàn)主鍵生成

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

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

具體的時(shí)間方式是通過(guò)表的策略來(lái)生成的。

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

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

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 ; 
存儲(chǔ)過(guò)程的理解:

1. 創(chuàng)建游標(biāo),用于查詢表中相應(yīng)的記錄。hasResult表示表中是否有記錄(如果沒(méi)有查到記錄,數(shù)據(jù)庫(kù)拋出“02000”號(hào)錯(cuò)誤,這是設(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ù)庫(kù)操作,如果沒(méi)有記錄,則直接插入數(shù)據(jù)庫(kù),并返回當(dāng)前編號(hào),如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ù)庫(kù)有記錄,則判斷日期是否為今天,如果不是今天的,則更新時(shí)間為今天,并返回今天的第一個(gè)編號(hào),如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)有編號(hào)生成過(guò)了,那直接在原編號(hào)的基礎(chǔ)上加1,更新數(shù)據(jù)庫(kù),然后返回編號(hào),如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.cmtents.com】

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

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

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