`

mysql实现sequence

阅读更多
如何在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会取序列值.
1
0
分享到:
评论
1 楼 whitesock 2010-07-09  
DELIMITER $$
DROP FUNCTION IF EXISTS `nextval` $$
CREATE DEFINER=`root`@`localhost` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)
BEGIN
UPDATE tas_sequence SET current_value = last_insert_id(current_value + increment) WHERE name = seq_name;
RETURN last_insert_id();
END $$
DELIMITER ;

相关推荐

    mysql实现sequence功能的代码

    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实现方法

    以下是一个基于MySQL实现Sequence的方法: 首先,我们需要创建一个存储序列当前值的表,例如`t_sequence`或`t_pub_sequence`。表结构如下: ```sql CREATE TABLE `t_sequence` ( `sequence_name` varchar(64) ...

    mysql中实现sequence.pdf

    在MySQL中,序列(Sequence)通常用于生成唯一的标识符,特别是在那些没有内置序列支持的数据库系统中,如MySQL。在Oracle或PostgreSQL等其他数据库中,我们可以直接创建序列对象,但在MySQL中,我们需要采取一些...

    mysql-sequence:nodejs的mysql序列生成器

    5. **易于集成**:作为Node.js模块,`mysql-sequence`可以无缝集成到现有的Node.js应用中,通过简单的API调用即可实现序列的创建和管理。 6. **事务支持**:由于序列操作可能涉及数据库的变更,因此`mysql-sequence...

    在MySQL中创建实现自增的序列(Sequence)的教程

    在MySQL中,自增序列(Sequence)是一种常用于生成唯一标识符的数据结构,尤其是在Oracle数据库中广泛使用。然而,MySQL自身并不直接支持Sequence,但可以通过创建表和存储过程来模拟这个功能。本教程将详细解释如何...

    java通过Mysql实现类似oracle序列功能序列.rar

    通过以上步骤,你可以使用Java和MySQL实现一个类似Oracle序列的功能,满足业务需求。请注意,这种方法可能不如Oracle的序列功能那么高效,但在没有内置序列功能的MySQL中,这是一种可行的解决方案。

    mysql雪花算法生成唯一整型ID主键的实现方法

    MySQL 雪花算法生成唯一整型ID主键的实现主要针对大数据环境下,需要大量生成全局唯一ID的需求。雪花算法是一种分布式ID生成策略,由Twitter开源,其设计目标是在分布式系统中生成具有全局唯一性、有序性和高并发性...

    MySQL实现类似Oracle序列的方案

    MySQL实现类似Oracle的序列 Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的; 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、...

    mysql-oracle数据同步

    在MySQL中,我们通常使用`AUTO_INCREMENT`属性来定义自增主键,而在Oracle中,可使用`SEQUENCE`对象来生成序列号。在数据同步过程中,如果需要保持两个数据库的主键一致,需要在插入Oracle时根据MySQL的最新主键值...

    MySQL数据库间实现同步.pdf

    MySQL数据库间实现同步 MySQL数据库同步是指在多个 MySQL 服务器之间实现数据的实时同步,以确保数据的一致性和最新性。这种同步机制可以应用于多种场景,例如数据备份、负载均衡、数据分析等。 在本文中,我们将...

    Oracle Sql语句转换成Mysql Sql语句

    6. **序列**:Oracle使用序列(SEQUENCE)来生成唯一ID,MySQL则常使用自增(AUTO_INCREMENT)字段。 7. **视图和存储过程**:Oracle的视图和存储过程可能需要在MySQL中重新编写,因为两者的语法和权限管理不同。 ...

    mysql currval 和 nextval 函数的实现.txt

    ### MySQL中的currval和nextval函数实现解析 #### 背景介绍 在数据库系统中,序列(Sequence)是一种常用的数据结构,它主要用于生成一系列连续的整数,这些整数通常用于自动生成主键或其他唯一标识符。MySQL本身并...

    基于Mycat实现Mysql读写分离以及分库分表.doc

    基于Mycat实现Mysql读写分离以及分库分表详解 本文档详细介绍了基于Mycat实现Mysql读写分离以及分库分表的技术,涵盖了Mycat安装、配置、读写分离、分库分表等多方面的知识点。 一、读写分离 Mycat读写分离是指将...

    MySQL的PPT文档

    - **自动增长数据类型处理**:MySQL支持自动增长的数据类型,如`AUTO_INCREMENT`,而Oracle中则需要使用序列(sequence)来实现类似功能。 - **单引号处理**:MySQL中可以使用单引号来表示字符串,但在Oracle中使用单...

    db2迁移到mysql.docx

    这是因为MySQL并没有直接与`SYSIBM.SYSDUMMY1`等效的表,但可以通过`DUAL`表实现相似功能。`DUAL`表在MySQL中是用于执行简单的查询或返回单个值的情况。 #### 四、datetime处理 ##### 4.1 datetime转换为字符串 在...

Global site tag (gtag.js) - Google Analytics