12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-11-25 14:52:15
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
在Oracle数据库中若想要一个连续的自增的数据类型的值,可以通过创建一个sequence来实现。而在MySQL数据库中并没有sequence。通常如果一个表只需要一个自增的列,那么我们可以
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
在Oracle数据库中若想要一个连续的自增的数据类型的值,可以通过创建一个sequence来实现。而在MySQL数据库中并没有sequence。通常如果一个表只需要一个自增的列,那么我们可以使用MySQL的auto_increment(一个表只能有一个自增主键)。若想要在MySQL像Oracle中那样使用序列,我们该如何操作呢?
例如存在如下表定义:
createtable`t_user`(`id`bigintauto_incrementprimarykey,`user_id`bigintuniquecomment'用户ID',`user_name`varchar(10)notnulldefault''comment'用户名');
其中user_id要求自增有序且唯一。实现方式有很多比如雪花算法、使用Redis或者Zookeeper等都可以获取一个满足条件的值,这里就不一一介绍。这里介绍使用MySQL的auto_increment和last_insert_id()来实现类似Oracle中的序列的方式。
方式一、使用存储过程一、创建一个包含自增主键的简单表。示例如下:
createtable`t_user_id_sequence`(`id`bigintnotnullauto_incrementprimarykey,`t_text`varchar(5)notnulldefault''comment'insertvalue');二、创建一个存储过程
delimiter&&createprocedure`pro_user_id_seq`(outsequencebigint)begininsertintot_user_id_sequence(t_text)values('a');selectlast_insert_id()intosequencefromdual;deletefromt_user_id_sequence;end&&delimiter;三、测试
callpro_user_id_seq(@value);select@valuefromdual;
使用存储过程的方式需要调用一次存储过程再进行赋值,稍微有点麻烦。
方式二、使用function一、创建一个生成sequence的函数delimiter&&createfunctionuser_id_seq_func()returnsbigintbegindeclaresequencebigint;insertintot_user_id_sequence(t_text)values('a');selectlast_insert_id()intosequencefromdual;deletefromt_user_id_sequence;returnsequence;end&&delimiter;二、测试
selectuser_id_seq_func()fromdual;insertintot_user(user_id,user_name)values(user_id_seq_func(),'java');select*fromt_user;
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19