mysql的序列问题_MYSQL 类ORACLE序列实现遇到的问题

MYSQL实现ORACLE的nextval方式

新建函数,如下:

-- --------------------------------------------------------------------------------

-- Routine DDL

-- Note: comments before and after the routine body will not be stored by the server

-- --------------------------------------------------------------------------------

DELIMITER $$

CREATE DEFINER=`root`@`localhost` FUNCTION `nextval`(seq_name varchar(100)) RETURNS bigint(20)

BEGIN

DECLARE cur_val bigint(20);

SELECT cur_value INTO cur_val FROM sequence WHERE name = seq_name;

IF cur_val IS NOT NULL THEN

UPDATE

sequence

SET cur_value = cur_value + increment

WHERE name = seq_name;

END IF;

RETURN cur_val;

END

新建表sequence

CREATE TABLE `sequence` (

`name` varchar(100) NOT NULL,

`increment` int(11) unsigned NOT NULL DEFAULT '1',

`cur_value` bigint(20) unsigned DEFAULT '1',

PRIMARY KEY (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

应用使用SSI,通过 select nextval('SEQ') 获得序列值。

遇到的问题:当select nextval('A') 后,再在另外的功能点中使用select nextval('B') 时,提示无column nextval('A'),抛出SQL异常。开始没搞明白,百度&谷歌都出动了。后来细想了下,应该是第2次的时候nextval('A')被当成了别名。故在ibatis的SQL配置中稍作修改select nextval('A') as x,就OK了。

41.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值