久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL序列的解決方法

190次閱讀
沒有評論

共計 5254 個字符,預(yù)計需要花費(fèi) 14 分鐘才能閱讀完成。

MySQL 序列的解決方法,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

MySQL 自增長與 Oracle 序列的區(qū)別:
自增長只能用于表中的其中一個字段
自增長只能被分配給固定表的固定的某一字段,不能被多個表共用.
自增長會把一個未指定或 NULL 值的字段自動填上.
在中添加序列,請看下面的實(shí)例:
在 MYSQL 里有這樣一張表:
 
Java 代碼
 
CREATE TABLE Movie( 
id INT NOT NULL AUTO_INCREMENT, 
name VARCHAR(60) NOT NULL, 
released YEAR NOT NULL, 
PRIMARY KEY (id) 
) ENGINE=InnoDB; 
 
CREATE TABLE Movie(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(60) NOT NULL,
released YEAR NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
 
Java 代碼
 
INSERT INTO Movie (name,released) VALUES (Gladiator ,2000); 
INSERT INTO Movie (id,name,released) VALUES (NULL, The Bourne Identity ,1998); 
INSERT INTO Movie (name,released) VALUES (Gladiator ,2000);
INSERT INTO Movie (id,name,released) VALUES (NULL, The Bourne Identity ,1998);
 
在 ORACLE 是這樣的:
 
Java 代碼
 
CREATE TABLE Movie( 
id INT NOT NULL, 
name VARCHAR2(60) NOT NULL, 
released INT NOT NULL, 
PRIMARY KEY (id) 
); 
 
CREATE SEQUENCE MovieSeq; 
 
CREATE TABLE Movie(
id INT NOT NULL,
name VARCHAR2(60) NOT NULL,
released INT NOT NULL,
PRIMARY KEY (id)
);
 
CREATE SEQUENCE MovieSeq;
 
Java 代碼
 
INSERT INTO Movie (id,name,released) VALUES (MovieSeq.NEXTVAL, Gladiator ,2000); 
INSERT INTO Movie (id,name,released) VALUES (MovieSeq.NEXTVAL, Gladiator ,2000);
 
在 oracle 下為表添加一個觸發(fā)器,就可以實(shí)現(xiàn) mysql 自增長功能:
 
Java 代碼
 
CREATE OR REPLACE TRIGGER BRI_MOVIE_TRG 
BEFORE INSERT ON Movie 
FOR EACH ROW 
BEGIN 
SELECT MovieSeq.NEXTVAL INTO :new.id FROM DUAL; 
END BRI_MOVIE_TRG; 

RUN; 
 
CREATE OR REPLACE TRIGGER BRI_MOVIE_TRG
 
BEFORE INSERT ON Movie
FOR EACH ROW
BEGIN
SELECT MovieSeq.NEXTVAL INTO :new.id FROM DUAL;
END BRI_MOVIE_TRG;
.
RUN;
 
這樣,插件記錄就可以成為 MYSQL 風(fēng)格:
 
Java 代碼
 
INSERT INTO Movie (name,released) VALUES (The Lion King ,1994); 
INSERT INTO Movie (name,released) VALUES (The Lion King ,1994);
 
下面我們來看看如何在 mysql 數(shù)據(jù)里使用序列語法.NEXTVAL 和 .CURVAL.
我們假設(shè)在 mysql 中序列的語法是:
 
NEXTVAL(rsquo;sequence rsquo;);
CURRVAL(rsquo;sequence rsquo;);
SETVAL(rsquo;sequence rsquo;,value);
 
下面就是 CURRRVAL 的實(shí)現(xiàn)方案:
 
Java 代碼
 
DROP TABLE IF EXISTS sequence; 
CREATE TABLE sequence ( 
name VARCHAR(50) NOT NULL, 
current_value INT NOT NULL, 
increment INT NOT NULL DEFAULT 1, 
PRIMARY KEY (name) 
) ENGINE=InnoDB; 
INSERT INTO sequence VALUES (MovieSeq ,3,5); 
DROP FUNCTION IF EXISTS currval; 
DELIMITER $ 
CREATE FUNCTION currval (seq_name VARCHAR(50)) 
RETURNS INTEGER 
CONTAINS SQL 
BEGIN 
DECLARE value INTEGER; 
SET value = 0; 
SELECT current_value INTO value 
FROM sequence 
WHERE name = seq_name; 
RETURN value; 
END$ 
DELIMITER ; 
 
DROP TABLE IF EXISTS sequence;
 
CREATE TABLE sequence (
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB;
 
INSERT INTO sequence VALUES (MovieSeq ,3,5);
DROP FUNCTION IF EXISTS currval;
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS INTEGER
CONTAINS SQL
BEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_name;
RETURN value;
END$
DELIMITER ;
 
測試一下結(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) 
 
mysql SELECT currval(MovieSeq
 
+———————+
 
| currval(MovieSeq) |
 
+———————+
 
|  3 |
 
+———————+
 
1 row in set (0.00 sec)
 
mysql SELECT currval(x
 
+————–+
 
| currval(x) |
 
+————–+
 
|  0 |
 
+————–+
 
1 row in set, 1 warning (0.00 sec)
 
mysql show warnings;
 
+———+——+——————+
 
| Level  | Code | Message  |
 
+———+——+——————+
 
| Warning | 1329 | No data to FETCH |
 
+———+——+——————+
 
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) 

看完上述內(nèi)容,你們掌握 MySQL 序列的解決方法的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-28發(fā)表,共計5254字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 孝义市| 加查县| 新巴尔虎左旗| 札达县| 陆河县| 昌都县| 临安市| 东辽县| 张家川| 六安市| 喀什市| 阿克陶县| 东阿县| 赤壁市| 南汇区| 望谟县| 苍梧县| 化隆| 宁远县| 蒙自县| 桦甸市| 饶河县| 小金县| 康平县| 苍溪县| 隆尧县| 安远县| 梁河县| 卢龙县| 巴青县| 建瓯市| 蓬溪县| 南安市| 廉江市| 巧家县| 山丹县| 湖州市| 涟水县| 梨树县| 汶川县| 武强县|