• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評(píng)論

            mysql實(shí)現(xiàn)oracle中的NEXTVAL,CURRVAL,SETVAl --- 轉(zhuǎn)

            MySQL自增長(zhǎng)與Oracle序列的區(qū)別: 
            自增長(zhǎng)只能用于表中的其中一個(gè)字段 
            自增長(zhǎng)只能被分配給固定表的固定的某一字段,不能被多個(gè)表共用. 
            自增長(zhǎng)會(huì)把一個(gè)未指定或NULL值的字段自動(dòng)填上. 

            在mysql中添加序列,請(qǐng)看下面的實(shí)例: 
            在MYSQL里有這樣一張表: 
            Java代碼 復(fù)制代碼
            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代碼 復(fù)制代碼
            1. INSERT INTO Movie (name,released) VALUES ('Gladiator',2000);   
            2. INSERT INTO Movie (id,name,released) VALUES (NULL,'The Bourne Identity',1998);  

            在ORACLE是這樣的: 
            Java代碼 復(fù)制代碼
            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代碼 復(fù)制代碼
            1. INSERT INTO Movie (id,name,released) VALUES (MovieSeq.NEXTVAL,'Gladiator',2000);  


            在oracle下為表添加一個(gè)觸發(fā)器,就可以實(shí)現(xiàn)mysql自增長(zhǎng)功能: 
            Java代碼 復(fù)制代碼
            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風(fēng)格: 
            Java代碼 復(fù)制代碼
            1. INSERT INTO Movie (name,released) VALUES ('The Lion King',1994);  


            下面我們來(lái)看看如何在mysql數(shù)據(jù)里使用Oracle序列語(yǔ)法.NEXTVAL 和 .CURVAL. 
            我們假設(shè)在mysql中序列的語(yǔ)法是: 

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


            下面就是CURRRVAL的實(shí)現(xiàn)方案: 

            Java代碼 復(fù)制代碼
            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 ;  

            測(cè)試一下結(jié)果: 
            Java代碼 復(fù)制代碼
            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代碼 復(fù)制代碼
            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代碼 復(fù)制代碼
            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代碼 復(fù)制代碼
            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代碼 復(fù)制代碼
            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)  

            posted on 2011-12-29 18:00 大龍 閱讀(3495) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            午夜精品久久久久久久久| 欧美一级久久久久久久大片| 久久笫一福利免费导航 | 伊人久久无码中文字幕| 97久久国产综合精品女不卡 | 色综合久久夜色精品国产| 久久精品一区二区三区AV| 午夜欧美精品久久久久久久| 99久久免费国产特黄| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久只这里是精品66| 国产V亚洲V天堂无码久久久| 久久国产精品偷99| 少妇精品久久久一区二区三区| 国产精品激情综合久久| 亚洲精品午夜国产VA久久成人 | 青青草原综合久久大伊人| 国产精品一区二区久久| 久久久久亚洲AV片无码下载蜜桃| 久久99国产精品久久| AV无码久久久久不卡蜜桃| 国产午夜精品久久久久九九| 久久棈精品久久久久久噜噜| 香蕉99久久国产综合精品宅男自| 国产综合久久久久久鬼色| 精品久久久无码人妻中文字幕| 精品无码久久久久久久动漫| 国产精品欧美久久久天天影视| 亚洲AV无码久久精品狠狠爱浪潮 | 一本大道久久a久久精品综合| 蜜桃麻豆WWW久久囤产精品| 久久精品亚洲男人的天堂 | 久久久久久A亚洲欧洲AV冫 | 久久久久免费视频| 国产精品欧美久久久久天天影视 | 亚洲欧洲久久久精品| 久久久WWW成人免费精品| 久久国产视屏| 久久影视综合亚洲| 51久久夜色精品国产| 久久99久久无码毛片一区二区|