背景:由于项目需要,必须用mysql设置主键自增长,而且想用字符串的。经过上网查找并且实验,终于做出了一套方案。现在就共享给大家! 解决思路:由于mysql不带sequence,所以要手写的,创建一张储存sequence的表(tb_sequence),然后手动插入一条数据 ,最后
背景:由于项目需要,必须用mysql设置主键自增长,而且想用字符串的。经过上网查找并且实验,终于做出了一套方案。现在就共享给大家!
解决思路:由于mysql不带sequence,所以要手写的,创建一张储存sequence的表(tb_sequence),然后手动插入一条数据 ,最后自定义一个函数来处理要增长的值。
一起做吧:
1、创建表tb_sequence,用来存放sequence值:
[sql] view
plaincopyprint?
-
create table tb_sequence(name varchar(50) not null,current_value int not null,_increment int not null default 1, primary key(name));
2、手动插入数据:
[sql] view
plaincopyprint?
-
insert into tb_sequence values('userid',100,2);
3、定义函数 _nextval:
[sql] view
plaincopyprint?
-
DELIMITER //
-
create function _nextval(n varchar(50)) returns integer
-
begin
-
declare _cur int;
-
set _cur=(select current_value from tb_sequence where name= n);
-
update tb_sequence
-
set current_value = _cur + _increment
-
where name=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 in set (0.00 sec)
-
-
mysql> select _nextval('userid');
-
+--------------------+
-
| _nextval('userid') |
-
+--------------------+
-
| 104 |
-
+--------------------+
-
1 row in set (0.00 sec)
-
-
mysql> select _nextval('userid');
-
+--------------------+
-
| _nextval('userid') |
-
+--------------------+
-
| 106 |
-
+--------------------+
-
1 row in set (0.00 sec)
6、实验结束。
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn