我们知道mysql中是不支持sequence的,一般是建表的时间使这个字段自增。
如 create table table_name(id int auto_increment primary key, ...);
或者alter table table_ame add id int auto_increment primary key //字段,一定设置为primary key
或者重设自增字段的起步值 alter table table_name AUTO_INCREMENT=n
但是我们在oracle中经常使用sequence_name.nextval,或者在程序中我们使用先select sequence_name.value from dual.如果我们的开发框架要同时支持oracle和mysql。一般会把取sequence提出来。如果在mysql中提供一个类似的函数,这样提出来会比较方便些。这是一种使用的场景。下面就说说怎么在mysql中实现一个nextval函数吧。
1先建一表
CREATE TABLE `sys_sequence` ( `NAME` varchar(50) NOT NULL, `CURRENT_VALUE` int(11) NOT NULL DEFAULT '0', `INCREMENT` int(11) NOT NULL DEFAULT '1', PRIMARY KEY (`NAME`) )
2.然后建立函数
DELIMITER $$ DROP FUNCTION IF EXISTS `currval`$$ CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS INT(11) BEGIN DECLARE VALUE INTEGER; SET VALUE=0; SELECT current_value INTO VALUE FROM sys_sequence WHERE NAME=seq_name; RETURN VALUE; END$$ DELIMITER ; CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name varchar(50)) RETURNS int(11) BEGIN UPDATE sys_sequence SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT where name=seq_name; return currval(seq_name); END CREATE DEFINER=`root`@`%` FUNCTION `setval`(seq_name varchar(50),value integer) RETURNS int(11) BEGIN update sys_sequence set current_value=value where name=seq_name; return currval(seq_name); END
测试下 select nextval('name') ; 搞定。
相关推荐
本文将详细介绍如何在MySQL中实现类似`currval`和`nextval`的功能,这两个函数分别用于获取当前值和下一个值。 #### 关键概念解析 1. **currval**: 该函数返回序列的当前值。 2. **nextval**: 该函数将序列的当前值...
MySQL实现类似Oracle的序列 Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的; 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、...
通过上述方法,即使MySQL原生不支持序列对象,我们也能够通过一些创造性的解决方案来实现类似Oracle的序列功能。这个案例不仅展示了数据库迁移时的技巧,同时也提供了使用MySQL进行高级数据库操作的例证,对于希望在...
为了在MySQL中实现类似于Oracle序列的功能,可以通过创建一张特殊的表和几个自定义函数来实现。这种方法可以有效地模拟Oracle序列的行为,并能够根据指定的步长和长度来生成数值。 ##### 2.1 创建模拟序列的表 在...
MySQL到Oracle数据库迁移的过程中,需要注意一系列的差异和调整,以确保迁移后的应用程序能够正常运行。以下是一些关键点的详细说明: 1. **自动增长的数据类型处理**: 在MySQL中,`AUTO_INCREMENT`字段自动分配...
- Oracle的`NEXTVAL`函数在MySQL中可通过自定义函数或`LAST_INSERT_ID()`实现类似功能。 4. **翻页查询**: - MySQL使用`LIMIT`关键字进行分页,如`LIMIT m, n`,从第m+1条开始取n条数据。 5. **函数转换**: -...
- Oracle不直接支持表级别的自增长字段,而是提供了`SEQUENCE`对象来实现类似功能。 - 示例:创建一个序列并将其用于插入操作。 ```sql CREATE SEQUENCE seq_id INCREMENT BY 1 START WITH 1 MAXVALUE 99999 ...
在 Oracle 中,要实现自动增长,需要创建一个序列(SEQUENCE)并在插入记录时手动使用序列的 NEXTVAL 属性。 3. **字符串引用**: MySQL 允许使用双引号来包围字符串,而 Oracle 只接受单引号。在 Oracle 中,如果...
ORDER BY ...)`窗口函数在MySQL中没有直接对应项,但可以使用用户变量模拟类似功能。 - Oracle的`ROWNUM`行号在MySQL中需要通过自定义变量实现。 在进行Oracle到MySQL的转换时,了解并掌握这些差异是确保数据迁移...
而在 Oracle 中,需要创建序列(Sequences)并配合 `NEXTVAL` 函数来实现类似的功能。 4. **翻页查询**: - MySQL 可以使用 `LIMIT m, n` 来实现分页,比如 `SELECT * FROM table LIMIT 10, 20` 会返回第 11 到 30...
日期的转换在两个系统中也有所不同,MySQL 有 SUBDATE 和 INTERVAL 函数,Oracle 有 TO_DATE 和 TO_CHAR 函数,以及 DATE字段的数学运算。 7. **时间戳操作**: - MySQL 有 NOW(), CURDATE(), 和 CURTIME() 函数...
相比之下,**MySQL**中与Oracle用户概念类似的是**database**。在MySQL中,登录后首先需创建一个database,然后才能在其中建表。默认创建的database有**mysql**和**test**。创建数据库使用`create database`命令,且...
在MySQL中,由于不支持直接创建序列,通常会采用其他方法来实现类似的功能,比如通过触发器或者表中的自增字段来实现。但在Oracle中,可以轻松地创建序列并使用它来自动生成唯一值。 例如,在Oracle中可以通过以下...
Oracle 则需要使用 ROWNUM 和子查询来实现类似功能。以下是两种常见的 Oracle 分页查询方法: - 方法一: ```sql SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM...