一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

MySQL序列解決方案

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

在mysql中添加序列,請(qǐng)看下面的實(shí)例:
在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下為表添加一個(gè)觸發(fā)器,就可以實(shí)現(xiàn)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風(fēng)格:
Java代碼  收藏代碼
  1. INSERT INTO Movie (name,released) VALUES ('The Lion King',1994);  


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

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


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

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 ;  

測(cè)試一下結(jié)果:
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)  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲伊人久久精品国产| 欧美久久一区二区精品| 一区二区三区日韩中文| 91福利视频日本免费看看| 一区二区日本一区二区欧美| 男人和女人黄 色大片| 国产一二三区不卡视频| 国产精品福利一级久久| 欧美极品欧美精品欧美| 国产视频福利一区二区| 日本亚洲精品在线观看| 国产成人精品在线一区二区三区| 国产一区二区三区四区免费| 中文字幕日韩精品人一妻| 国产精品激情在线观看| 国产亚洲成av人在线观看| 日韩夫妻午夜性生活视频| 亚洲精品国产主播一区| 日韩精品视频高清在线观看| 国内午夜精品视频在线观看| 国产精品国产亚洲区久久| 亚洲免费视频中文字幕在线观看| 好骚国产99在线中文| 欧美日韩国产成人高潮| 国产精品人妻熟女毛片av久| 国产欧美日韩在线一区二区| 中文字幕精品一区二区三| 国产不卡一区二区四区| 午夜精品在线观看视频午夜| 伊人色综合久久伊人婷婷| 在线观看欧美视频一区| 国产精品二区三区免费播放心| av中文字幕一区二区三区在线| 亚洲国产一区精品一区二区三区色| 在线免费国产一区二区三区 | 黄片美女在线免费观看| 亚洲国产性感美女视频| 欧美黑人黄色一区二区| 国产专区亚洲专区久久| 亚洲最新中文字幕在线视频 | 久久精品偷拍视频观看|