久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    MySQL序列解決方案

     陳湖雨_毓 2013-05-31
    MySQL自增長與Oracle序列的區別:
    自增長只能用于表中的其中一個字段
    自增長只能被分配給固定表的固定的某一字段,不能被多個表共用.
    自增長會把一個未指定或NULL值的字段自動填上.

    在mysql中添加序列,請看下面的實例:
    在MYSQL里有這樣一張表:
    Java代碼  收藏代碼
    1. CREATE TABLE Movie(  
    2. id           INT NOT NULL AUTO_INCREMENT,  
    3. name     VARCHAR(60) NOT NULL,  
    4. released YEAR NOT NULL,  
    5. PRIMARY KEY (id)  
    6. ) ENGINE=InnoDB;  

    Java代碼  收藏代碼
    1. INSERT INTO Movie (name,released) VALUES ('Gladiator',2000);  
    2. INSERT INTO Movie (id,name,released) VALUES (NULL,'The Bourne Identity',1998);  

    在ORACLE是這樣的:
    Java代碼  收藏代碼
    1. CREATE TABLE Movie(  
    2. id          INT NOT NULL,  
    3. name     VARCHAR2(60) NOT NULL,  
    4. released INT NOT NULL,  
    5. PRIMARY KEY (id)  
    6. );  
    7. CREATE SEQUENCE MovieSeq;  

    Java代碼  收藏代碼
    1. INSERT INTO Movie (id,name,released) VALUES (MovieSeq.NEXTVAL,'Gladiator',2000);  


    在oracle下為表添加一個觸發器,就可以實現mysql自增長功能:
    Java代碼  收藏代碼
    1. CREATE OR REPLACE TRIGGER BRI_MOVIE_TRG  
    2. BEFORE INSERT ON Movie  
    3. FOR EACH ROW  
    4. BEGIN  
    5.   SELECT MovieSeq.NEXTVAL INTO :new.id FROM DUAL;  
    6. END BRI_MOVIE_TRG;  
    7. .  
    8. RUN;  

    這樣,插件記錄就可以成為MYSQL風格:
    Java代碼  收藏代碼
    1. INSERT INTO Movie (name,released) VALUES ('The Lion King',1994);  


    下面我們來看看如何在mysql數據里使用Oracle序列語法.NEXTVAL 和 .CURVAL.
    我們假設在mysql中序列的語法是:

      NEXTVAL(’sequence’);
      CURRVAL(’sequence’);
      SETVAL(’sequence’,value);


    下面就是CURRRVAL的實現方案:

    Java代碼  收藏代碼
    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 $  
    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 ;  

    測試一下結果:
    Java代碼  收藏代碼
    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

    Java代碼  收藏代碼
    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 ;  


    Java代碼  收藏代碼
    1. mysql> select nextval('MovieSeq');  
    2. +---------------------+  
    3. | nextval('MovieSeq') |  
    4. +---------------------+  
    5. |                  15 |  
    6. +---------------------+  
    7. 1 row in set (0.09 sec)  
    8.   
    9. mysql> select nextval('MovieSeq');  
    10. +---------------------+  
    11. | nextval('MovieSeq') |  
    12. +---------------------+  
    13. |                  20 |  
    14. +---------------------+  
    15. 1 row in set (0.01 sec)  
    16.   
    17. mysql> select nextval('MovieSeq');  
    18. +---------------------+  
    19. | nextval('MovieSeq') |  
    20. +---------------------+  
    21. |                  25 |  
    22. +---------------------+  
    23. 1 row in set (0.00 sec)  


    setval
    Java代碼  收藏代碼
    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 ;  


    Java代碼  收藏代碼
    1. mysql> select setval('MovieSeq',150);  
    2. +------------------------+  
    3. | setval('MovieSeq',150) |  
    4. +------------------------+  
    5. |                    150 |  
    6. +------------------------+  
    7. 1 row in set (0.06 sec)  
    8.   
    9. mysql> select curval('MovieSeq');  
    10. +---------------------+  
    11. | currval('MovieSeq') |  
    12. +---------------------+  
    13. |                 150 |  
    14. +---------------------+  
    15. 1 row in set (0.00 sec)  
    16.   
    17. mysql> select nextval('MovieSeq');  
    18. +---------------------+  
    19. | nextval('MovieSeq') |  
    20. +---------------------+  
    21. |                 155 |  
    22. +---------------------+  
    23. 1 row in set (0.00 sec)  

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国产成人无码免费看视频软件| 亚洲 校园 欧美 国产 另类| 日韩精品一区二区三区影院| 大学生被内谢粉嫩无套| 国产中文字幕一区二区| 九九电影网午夜理论片| 亚洲AV综合色区无码二区偷拍| 亚洲欧美综合人成在线| 国产精品久久国产精品99 | 成 人 在 线 免费观看| 在线天堂中文官网| 亚洲精品美女一区二区| 亚洲日韩VA无码中文字幕| 国产在线中文字幕精品| 久久毛片少妇高潮| 麻豆一区二区中文字幕| 精品国产午夜肉伦伦影院| 亚洲精品日韩在线丰满| 丰满人妻被黑人猛烈进入| 中文字幕日韩有码国产| 亚洲AV色香蕉一区二区蜜桃小说| 亚洲男女羞羞无遮挡久久丫| 亚洲 另类 日韩 制服 无码| 桃花岛亚洲成在人线AV| 天天夜碰日日摸日日澡| 偷炮少妇宾馆半推半就激情| 日本福利一区二区精品| 人人妻人人添人人爽欧美一区| 亚洲 国产 制服 丝袜 一区| 国产又大又硬又粗| 影音先锋女人AA鲁色资源| 国产片AV国语在线观看手机版| 亚洲AV无码成人网站手机观看 | AV区无码字幕中文色| 亚洲成人av在线高清| 国偷自产AV一区二区三区| 国产日产精品系列| 少妇被无套内谢免费看| 亚洲日韩一区精品射精| 毛片无遮挡高清免费| 在国产线视频A在线视频|