bitsCN.com
MySQL自增长与Oracle序列的区别:
自增长只能用于表中的其中一个字段
自增长只能被分配给固定表的固定的某一字段,不能被多个表共用.
自增长会把一个未指定或NULL值的字段自动填上.
在mysql中添加序列,请看下面的实例:
在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下为表添加一个触发器,就可以实现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风格:
Java代码
INSERT INTO Movie (name,released) VALUES ('The Lion King',1994);
INSERT INTO Movie (name,released) VALUES ('The Lion King',1994);
下面我们来看看如何在mysql数据里使用Oracle序列语法.NEXTVAL 和 .CURVAL.
我们假设在mysql中序列的语法是:
NEXTVAL(’sequence’);
CURRVAL(’sequence’);
SETVAL(’sequence’,value);
下面就是CURRRVAL的实现方案:
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 ;
测试一下结果:
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)
作者“ERDP技术架构”
bitsCN.com
oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。

在oracle中,可以利用modify配合“alter table”语句来修改列的长度,modify的作用就是修改字段类型和长度,也即修改字段的属性,语法为“alter table 表名 modify 列名 字段类型 需要修改的字段长度”。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版