<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 閱讀(899) 評論(0)  編輯  收藏 所屬分類: MySqlHibernate

    主站蜘蛛池模板: 97久久国产亚洲精品超碰热| 不卡精品国产_亚洲人成在线| 7x7x7x免费在线观看| 337p日本欧洲亚洲大胆人人| 亚洲电影一区二区| 亚洲国产精品特色大片观看完整版| 日韩一区二区免费视频| 九九九精品成人免费视频| 好男人www免费高清视频在线| 91成年人免费视频| 1000部国产成人免费视频| 黄色网址在线免费| 69天堂人成无码麻豆免费视频| 亚洲人成人网站在线观看| 任你躁在线精品免费| 中文字幕无码精品亚洲资源网久久| 亚洲国产主播精品极品网红| 蜜臀98精品国产免费观看| 国产青草亚洲香蕉精品久久| 久久精品国产亚洲AV麻豆~| 日韩a级毛片免费视频| 久久这里只精品热免费99| 黄色一级视频免费| 91亚洲国产成人精品下载| 男人的天堂亚洲一区二区三区| 精品一区二区三区免费观看| 亚洲制服丝袜在线播放| 亚洲妇熟XXXX妇色黄| 国产婷婷高清在线观看免费| 猫咪免费人成网站在线观看| 国产成人精品免费视频大全| 亚洲AV无码专区亚洲AV桃| 亚洲人成网www| 亚洲性久久久影院| 在线视频免费观看www动漫| 在线观看www日本免费网站| 日韩av无码免费播放| 九一在线完整视频免费观看| 亚洲日日做天天做日日谢| 精品亚洲成a人片在线观看| a级亚洲片精品久久久久久久|