<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    void

    mysql 自增序列(轉)

    1:原理是在建立一個觸發器TRIGGER tri_NewBH 在table插入時執行序列計算 mysql> CREATE TABLE tb(BH CHAR(16),content VARCHAR(20),`date` DATETIME,val INT); Query OK, 0 rows affected (0.05 sec) mysql> mysql> mysql> DELIMITER $$ mysql> DROP TRIGGER IF EXISTS tri_NewBH $$ Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> mysql> CREATE TRIGGER tri_NewBH BEFORE INSERT ON tb -> FOR EACH ROW -> BEGIN -> DECLARE dt CHAR(8); -> DECLARE bh_id CHAR(16); -> DECLARE number INT; -> DECLARE new_bh VARCHAR(16); -> -> SET dt = DATE_FORMAT(CURDATE(),'%Y%m%d'); -> -> SELECT -> MAX(BH) INTO bh_id -> FROM tb -> WHERE BH LIKE CONCAT(dt,'%'); -> -> IF bh_id = '' OR bh_id IS NULL THEN -> SET new_bh = CONCAT(dt,'00000001'); -> ELSE -> SET number = RIGHT(bh_id,8) + 1; -> SET new_bh = RIGHT(CONCAT('00000000',number),8); -> SET new_bh=CONCAT(dt,new_bh); -> END IF; -> -> SET NEW.BH = new_bh; -> END$$ Query OK, 0 rows affected (0.09 sec) mysql> mysql> DELIMITER ; mysql> INSERT INTO tb(content,`date`,val) VALUES('LiangCK','2009-05-11',20); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO tb(content,`date`,val) VALUES('LiangCK','2009-05-11',20); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO tb(content,`date`,val) VALUES('LiangCK','2009-05-11',20); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO tb(content,`date`,val) VALUES('LiangCK','2009-05-11',20); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO tb(content,`date`,val) VALUES('LiangCK','2009-05-11',20); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO tb(content,`date`,val) VALUES('LiangCK','2009-05-11',20); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO tb(content,`date`,val) VALUES('LiangCK','2009-05-11',20); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM tb; +------------------+---------+---------------------+------+ | BH | content | date | val | +------------------+---------+---------------------+------+ | 2009051100000001 | LiangCK | 2009-05-11 00:00:00 | 20 | | 2009051100000002 | LiangCK | 2009-05-11 00:00:00 | 20 | | 2009051100000003 | LiangCK | 2009-05-11 00:00:00 | 20 | | 2009051100000004 | LiangCK | 2009-05-11 00:00:00 | 20 | | 2011051200000001 | LiangCK | 2009-05-11 00:00:00 | 20 | | 2011051200000002 | LiangCK | 2009-05-11 00:00:00 | 20 | | 2011051200000003 | LiangCK | 2009-05-11 00:00:00 | 20 | +------------------+---------+---------------------+------+ 7 rows in set (0.00 sec)

     

    2.下面就是另外一個的實現方案: 

    原理是創建一個專門記錄序列的表sequence,記錄有當前序列號,序列的間隔如+1

     

    Sql代碼  收藏代碼
    1. DROP TABLE IF EXISTS sequence;/*創建記錄當前序列的表*/  
    2. CREATE TABLE sequence (  
    3. name              VARCHAR(50) NOT NULL,  
    4. current_value INT NOT NULL,  
    5. increment       INT NOT NULL DEFAULT 1,  
    6. PRIMARY KEY (name)  
    7. ) ENGINE=InnoDB;  
    8. INSERT INTO sequence VALUES ('MovieSeq',3,5);  
    9. DROP FUNCTION IF EXISTS currval;  
    10. DELIMITER $/*創建一個獲取當前序列的function*/  
    11. CREATE FUNCTION currval (seq_name VARCHAR(50))  
    12. RETURNS INTEGER  
    13. CONTAINS SQL  
    14. BEGIN  
    15.   DECLARE value INTEGER;  
    16.   SET value = 0;  
    17.   SELECT current_value INTO value  
    18.   FROM sequence  
    19.   WHERE name = seq_name;  
    20.   RETURN value;  
    21. END$  
    22. DELIMITER ;  

     測試一下結果:

     

     

    Sql代碼  收藏代碼
    1. mysql> SELECT currval('MovieSeq');  
    2. +---------------------+  
    3. | currval('MovieSeq') |  
    4. +---------------------+  
    5. |                   3 |  
    6. +---------------------+  
    7. 1 row in set (0.00 sec)  
    8. mysql> SELECT currval('x');  
    9. +--------------+  
    10. | currval('x') |  
    11. +--------------+  
    12. |            0 |  
    13. +--------------+  
    14. 1 row in set, 1 warning (0.00 sec)  
    15. mysql> show warnings;  
    16. +---------+------+------------------+  
    17. Level   | Code | Message          |  
    18. +---------+------+------------------+  
    19. | Warning | 1329 | No data to FETCH |  
    20. +---------+------+------------------+  
    21. 1 row in set (0.00 sec)  

     nextval 

    //獲取下一個數值..先在sequence里面調用update當前最大數值+1然后再調用currval獲得當前數值
    Sql代碼  收藏代碼
    1. DROP FUNCTION IF EXISTS nextval;  
    2. DELIMITER $  
    3. CREATE FUNCTION nextval (seq_name VARCHAR(50))  
    4. RETURNS INTEGER  
    5. CONTAINS SQL  
    6. BEGIN  
    7.    UPDATE sequence  
    8.    SET          current_value = current_value + increment  
    9.    WHERE name = seq_name;  
    10.    RETURN currval(seq_name);  
    11. END$  
    12. DELIMITER ;  
     mysql> select nextval('MovieSeq');
    Sql代碼  收藏代碼
    1. +---------------------+  
    2. | nextval('MovieSeq') |  
    3. +---------------------+  
    4. |                  15 |  
    5. +---------------------+  
    6. 1 row in set (0.09 sec)  
    7.   
    8. mysql> select nextval('MovieSeq');  
    9. +---------------------+  
    10. | nextval('MovieSeq') |  
    11. +---------------------+  
    12. |                  20 |  
    13. +---------------------+  
    14. 1 row in set (0.01 sec)  
    15.   
    16. mysql> select nextval('MovieSeq');  
    17. +---------------------+  
    18. | nextval('MovieSeq') |  
    19. +---------------------+  
    20. |                  25 |  
    21. +---------------------+  
    22. 1 row in set (0.00 sec)  
     setval 
    Sql代碼  收藏代碼
    1. DROP FUNCTION IF EXISTS setval;  
    2. DELIMITER $  
    3. CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)  
    4. RETURNS INTEGER  
    5. CONTAINS SQL  
    6. BEGIN  
    7.    UPDATE sequence  
    8.    SET          current_value = value  
    9.    WHERE name = seq_name;  
    10.    RETURN currval(seq_name);  
    11. END$  
    12. DELIMITER ;  
     mysql> select setval('MovieSeq',150);
    Sql代碼  收藏代碼
    1. +------------------------+  
    2. | setval('MovieSeq',150) |  
    3. +------------------------+  
    4. |                    150 |  
    5. +------------------------+  
    6. 1 row in set (0.06 sec)  
    7.   
    8. mysql> select curval('MovieSeq');  
    9. +---------------------+  
    10. | currval('MovieSeq') |  
    11. +---------------------+  
    12. |                 150 |  
    13. +---------------------+  
    14. 1 row in set (0.00 sec)  
    15.   
    16. mysql> select nextval('MovieSeq');  
    17. +---------------------+  
    18. | nextval('MovieSeq') |  
    19. +---------------------+  
    20. |                 155 |  
    21. +---------------------+  
    22. 1 row in set (0.00 sec)  
     

    posted on 2015-04-29 17:33 void 閱讀(900) 評論(0)  編輯  收藏 所屬分類: MySqlHibernate

    主站蜘蛛池模板: 免费国产黄网站在线观看动图| 老司机亚洲精品影院无码| 亚洲一区二区观看播放| 嘿嘿嘿视频免费网站在线观看| 亚洲专区先锋影音| 最近高清中文字幕免费| 亚洲网站免费观看| 一个人在线观看视频免费| 亚洲AV无码国产精品色| 成人免费视频小说| 美女黄色毛片免费看| 久久久青草青青国产亚洲免观| 中文字幕免费视频精品一| 久久亚洲高清观看| 6080午夜一级毛片免费看6080夜福利| 亚洲精品乱码久久久久久下载 | 亚洲国产精品久久久久| 人妻丰满熟妇无码区免费| 亚洲中字慕日产2020| 最近最新中文字幕完整版免费高清| 久久久久亚洲国产| 亚洲 无码 在线 专区| 岛国岛国免费V片在线观看| 亚洲狠狠综合久久| a毛片基地免费全部视频| 亚洲AV日韩综合一区| 国内精品久久久久久久亚洲| 免费观看在线禁片| 国产午夜亚洲精品| 亚洲精品综合久久| 91短视频在线免费观看| 亚洲精品成a人在线观看夫 | 亚洲精品私拍国产福利在线| 成人免费无遮挡无码黄漫视频| 欧洲美女大片免费播放器视频| 亚洲av日韩av激情亚洲| 女人18毛片a级毛片免费 | 日本免费一区尤物| 亚洲成av人在线观看网站| 免费国产真实迷j在线观看| 免费福利在线视频|