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了。