欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MySQL序列解决方案

程序员文章站 2022-06-17 17:29:32
...

最近公司项目从Oracle向MySQL移植,遇到的第一个问题就是MySQL没有序列。 MySQL能够把字段设置为自增长,写法为: view plaincop

最近公司项目从Oracle向MySQL移植,遇到的第一个问题就是MySQL没有序列。

MySQL能够把字段设置为自增长,,写法为:

view plaincopy to clipboardprint?
create table test
(
id int auto_increment primary key
)
create table test
(
id int auto_increment primary key
)

自增字段只能是primary key,插入数据时自增字段不要设值或把值设成NULL就能实现自增长了。

view plaincopy to clipboardprint?
# INSERT INTO test (name) VALUES ('Gladiator');
# INSERT INTO test (id,name) VALUES (NULL,'The Bourne Identity');
# INSERT INTO test (name) VALUES ('Gladiator');
# INSERT INTO test (id,name) VALUES (NULL,'The Bourne Identity');

但是这种自增长只能用于某个表的某个字段,要实现像oracle那样的序列功能要用到存储过程

view plaincopy to clipboardprint?
CREATE TABLE `seq` (
name varchar(20) NOT NULL,
val int(10) UNSIGNED NOT NULL,
PRIMARY KEY (name)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE FUNCTION seq(seq_name char (20)) returns int
begin
UPDATE seq SET val=last_insert_id(val+1) WHERE name=seq_name;
RETURN last_insert_id();
end
INSERT INTO seq VALUES('one',1000);
select seq('one');

MySQL序列解决方案