如何在mysql数据里使用Oracle序列语法.NEXTVAL和.CURVAL.
假设在mysql中序列的语法是:
NEXTVAL('sequence');
CURRVAL('sequence');
SETVAL('sequence',value);
-- 1创建tas_music表
DROP TABLE IF EXISTS
`tas_app`.`tas_music`;
CREATE TABLE `tas_app`.`tas_music` (
`id` int(4)
NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`icon` varchar(256)
NOT NULL DEFAULT '',
`url` varchar(256) NOT NULL DEFAULT '',
`lyric`
varchar(256) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB
AUTO_INCREMENT=2093 DEFAULT CHARSET=utf8;
-- 2创建序列表
DROP TABLE IF
EXISTS `tas_app`.`tas_sequence`;
CREATE TABLE `tas_app`.`tas_sequence`
(
`name` varchar(50) NOT NULL,
`current_value` int(11) NOT
NULL,
`increment` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`name`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 3序列表里插入如下记录
insert into
tas_app.tas_sequence values('music',23,1);
-- 4创建nextval
function的代码如下:
DELIMITER $$
DROP FUNCTION IF EXISTS `nextval` $$
CREATE
DEFINER=`admin`@`%` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS
int(11)
BEGIN
UPDATE tas_sequence
SET current_value =
current_value + increment
WHERE name = seq_name;
RETURN
currval(seq_name);
END $$
DELIMITER ;
-- 5创建setval
function的代码如下:
DELIMITER $$
DROP FUNCTION IF EXISTS `setval` $$
CREATE
DEFINER=`admin`@`%` FUNCTION `setval`(seq_name VARCHAR(50), value INTEGER)
RETURNS int(11)
BEGIN
UPDATE tas_sequence
SET current_value =
value
WHERE name = seq_name;
RETURN currval(seq_name);
END
$$
DELIMITER ;
-- 6创建currval function的代码如下:
DELIMITER $$
DROP
FUNCTION IF EXISTS `currval` $$
CREATE DEFINER=`admin`@`%` FUNCTION
`currval`(seq_name VARCHAR(50)) RETURNS int(11)
BEGIN
DECLARE value
INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM
tas_sequence
WHERE name = seq_name;
RETURN value;
END
$$
DELIMITER ;
-- 7创建触发器
DELIMITER $$
drop trigger if exists
tas_music_trigger $$
create trigger tas_music_trigger before insert on
tas_music
for each row begin
if new.id is null or new.id = '' or new.id =
0 THEN
set new.id = nextval('music');
end if;
end $$
DELIMITER
;
-- 8至此,向tas_music表插入数据时,如果id值为空,则id会取序列值.
相关推荐
mysql实现sequence功能 1.建立sequence记录表 CREATE TABLE `sys_sequence` ( `seq_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `min_value` int(11) NOT NULL, `max_value` int(11)...
以下是一个基于MySQL实现Sequence的方法: 首先,我们需要创建一个存储序列当前值的表,例如`t_sequence`或`t_pub_sequence`。表结构如下: ```sql CREATE TABLE `t_sequence` ( `sequence_name` varchar(64) ...
在MySQL中,序列(Sequence)通常用于生成唯一的标识符,特别是在那些没有内置序列支持的数据库系统中,如MySQL。在Oracle或PostgreSQL等其他数据库中,我们可以直接创建序列对象,但在MySQL中,我们需要采取一些...
5. **易于集成**:作为Node.js模块,`mysql-sequence`可以无缝集成到现有的Node.js应用中,通过简单的API调用即可实现序列的创建和管理。 6. **事务支持**:由于序列操作可能涉及数据库的变更,因此`mysql-sequence...
在MySQL中,自增序列(Sequence)是一种常用于生成唯一标识符的数据结构,尤其是在Oracle数据库中广泛使用。然而,MySQL自身并不直接支持Sequence,但可以通过创建表和存储过程来模拟这个功能。本教程将详细解释如何...
通过以上步骤,你可以使用Java和MySQL实现一个类似Oracle序列的功能,满足业务需求。请注意,这种方法可能不如Oracle的序列功能那么高效,但在没有内置序列功能的MySQL中,这是一种可行的解决方案。
MySQL 雪花算法生成唯一整型ID主键的实现主要针对大数据环境下,需要大量生成全局唯一ID的需求。雪花算法是一种分布式ID生成策略,由Twitter开源,其设计目标是在分布式系统中生成具有全局唯一性、有序性和高并发性...
MySQL实现类似Oracle的序列 Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的; 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、...
在MySQL中,我们通常使用`AUTO_INCREMENT`属性来定义自增主键,而在Oracle中,可使用`SEQUENCE`对象来生成序列号。在数据同步过程中,如果需要保持两个数据库的主键一致,需要在插入Oracle时根据MySQL的最新主键值...
MySQL数据库间实现同步 MySQL数据库同步是指在多个 MySQL 服务器之间实现数据的实时同步,以确保数据的一致性和最新性。这种同步机制可以应用于多种场景,例如数据备份、负载均衡、数据分析等。 在本文中,我们将...
6. **序列**:Oracle使用序列(SEQUENCE)来生成唯一ID,MySQL则常使用自增(AUTO_INCREMENT)字段。 7. **视图和存储过程**:Oracle的视图和存储过程可能需要在MySQL中重新编写,因为两者的语法和权限管理不同。 ...
### MySQL中的currval和nextval函数实现解析 #### 背景介绍 在数据库系统中,序列(Sequence)是一种常用的数据结构,它主要用于生成一系列连续的整数,这些整数通常用于自动生成主键或其他唯一标识符。MySQL本身并...
基于Mycat实现Mysql读写分离以及分库分表详解 本文档详细介绍了基于Mycat实现Mysql读写分离以及分库分表的技术,涵盖了Mycat安装、配置、读写分离、分库分表等多方面的知识点。 一、读写分离 Mycat读写分离是指将...
- **自动增长数据类型处理**:MySQL支持自动增长的数据类型,如`AUTO_INCREMENT`,而Oracle中则需要使用序列(sequence)来实现类似功能。 - **单引号处理**:MySQL中可以使用单引号来表示字符串,但在Oracle中使用单...
这是因为MySQL并没有直接与`SYSIBM.SYSDUMMY1`等效的表,但可以通过`DUAL`表实现相似功能。`DUAL`表在MySQL中是用于执行简单的查询或返回单个值的情况。 #### 四、datetime处理 ##### 4.1 datetime转换为字符串 在...