mysql如何储存序列_mysql如何设置自动增长序列sequence(一)

背景:由于项目需要,必须用mysql设置主键自增长,而且想用字符串的。经过上网查找并且实验,终于做出了一套方案。现在就共享给大家! 解决思路:由于mysql不带sequence,所以要手写的,创建一张储存sequence的表(tb_sequence),然后手动插入一条数据 ,最后

背景:由于项目需要,必须用mysql设置主键自增长,而且想用字符串的。经过上网查找并且实验,终于做出了一套方案。现在就共享给大家!

解决思路:由于mysql不带sequence,所以要手写的,创建一张储存sequence的表(tb_sequence),然后手动插入一条数据 ,最后自定义一个函数来处理要增长的值。

一起做吧:

1、创建表tb_sequence,用来存放sequence值:

[sql] view

plaincopyprint?

createtabletb_sequence(namevarchar(50)notnull,current_valueintnotnull,_incrementintnotnulldefault1,primarykey(name));

2、手动插入数据:

[sql] view

plaincopyprint?

insertintotb_sequencevalues('userid',100,2);

3、定义函数 _nextval:

[sql] view

plaincopyprint?

DELIMITER //

createfunction_nextval(nvarchar(50))returnsinteger

begin

declare_curint;

set_cur=(selectcurrent_valuefromtb_sequencewherename= n);

updatetb_sequence

setcurrent_value = _cur + _increment

wherename=n ;

return_cur;

end;

//

说明:delimiter // ---->定义语句结束符。其他的代码 自己看吧。

4、恢复默认的语句结束符:(可以省略但是结束符必须用// ,为了方便还是设置回来。)

[sql] view

plaincopyprint?

DELIMITER ;

5、检验结果

多次执行以下语句:

[sql] view

plaincopyprint?

select_nextval('userid');

结果显示:

[sql] view

plaincopyprint?

mysql>select_nextval('userid');

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

| _nextval('userid') |

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

| 102 |

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

1 row inset(0.00 sec)

mysql> select_nextval('userid');

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

| _nextval('userid') |

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

| 104 |

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

1 row inset(0.00 sec)

mysql> select_nextval('userid');

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

| _nextval('userid') |

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

| 106 |

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

1 row inset(0.00 sec)

6、实验结束。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值