1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        MySQL 運用存儲過程實現主鍵生成

        發布時間:  2012/7/27 17:24:24

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

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

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

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

        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. 創建游標,用于查詢表中相應的記錄。hasResult表示表中是否有記錄(如果沒有查到記錄,數據庫拋出“02000”號錯誤,這是設置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. 執行數據庫操作,如果沒有記錄,則直接插入數據庫,并返回當前編號,如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. 如果數據庫有記錄,則判斷日期是否為今天,如果不是今天的,則更新時間為今天,并返回今天的第一個編號,如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. 如果今天已經有編號生成過了,那直接在原編號的基礎上加1,更新數據庫,然后返回編號,如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.endtimedelusion.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

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

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线