mysql序列号生成软件_mysql 序列号生成器

如果你不想使用mysql的自动递增,但又想实现主键序列号的功能,可以使用下面的方法,通过函数用一张表去维护生成多个表的序列号,简单又实用

1.创建生成多个表的序列号的数据维护表

CREATE TABLE seq (

name varchar(20) NOT NULL,

val int(10) UNSIGNED NOT NULL,

PRIMARY KEY  (name)

) ENGINE=MyISAM DEFAULT CHARSET=UTF-8

2.插入几条初始化数据

INSERT INTO seq VALUES('one',100);

INSERT INTO seq VALUES('two',1000);

3.创建函数以生成序列号

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

4.测试

mysql> SELECT seq('one'),seq('two'),seq('one'),seq('one');

+------------+------------+------------+------------+

| seq('one') | seq('two') | seq('one') | seq('one') |

+------------+------------+------------+------------+

|        102 |       1002 |        103 |        104 |

+------------+------------+------------+------------+

1 row IN SET (0.00 sec)

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-10-21 22:58

浏览 2834

论坛回复 / 浏览 (6 / 8069)

分类:数据库

评论

6 楼

pekkle

2009-12-30

说白了,就是用一张表来记录,没意思。并发就死了

5 楼

coolzhi

2009-11-09

nuthell 写道

可否深入详细的讲解一下,如何运用?可以应用在什么地方。

谢谢

本人主要是应用于数据插入时自动生成一个短标识,这样生成静态html或者做伪静态的时候的链接比较容易让搜索引擎或者人记住,没有考虑到并发性能问题

4 楼

方世玉

2009-11-09

每次是update加1,性能很差,大批量的情况下会有问题的

相比之下,oracle是可以提前锁定一批序列号,存放在内存里面的。

3 楼

xiaoych

2009-11-09

性能会比较差吧……

2 楼

hardPass

2009-11-09

这种东西,其实没有什么意义。

可以由应用程序来生成有序的id,方便操作,更方便取刚插入的ID,而不需要考虑并发等问题。

如果用一个服务做这个工作,还方便集群。

1 楼

nuthell

2009-11-09

可否深入详细的讲解一下,如何运用?可以应用在什么地方。

谢谢


版权声明:本文为weixin_42549496原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。