概述由于mysql和oracle不同,不支持直接sequence,所以需要建表模拟sequence的功能。1.创建序列表CREATETABLE`sequence`(`name`VARCHAR(50)COLLATEutf8_binNOTNULLCOMMENT'序列的名称',`current_value`INT(11)NOTNULLCOMMENT'序列的当前值',`increment`INT(11)notnulldefault'1'注释'序列序列',primarykey(`name`)=innodbdefaultcharset=utf8collat??e=utf8_bin;2,,创建,,创建取取取取取当当当前值前值的''BEGINDECLAREvalueINTEGER;SETvalue=0;SELECTcurrent_valueINTOvalueFROMsequenceWHEREname=seq_name;RETURNvalue;END$DELIMITER;3、创建–取下一个值的函数DROPFUNCTIONIFEXISTSnextval;DELIMITER$CREATEFUNCTIONnextval(seq_nameVARCHAR(50))RETURNSINTEGERLANGUAGESQLDETERMINISTICCONTAINSSQLSQLSECURITYDEFINERCOMMENT''BEGINUPDATEsequenceSETcurrent_value=current_value+incrementWHEREname=seq_name;RETURNcurrval(seq_name);END$DELIMITER;4.创建更新当前值的函数DROPFUNCTIONIFEXISTSsetval;DELIMITER$CREATEFUNCTIONsetval(seq_nameVARCHAR(50),valueINTEGER)RETURNSINTEGERLANGUAGESQLDETERMINISTICCONTAINSSQLSQLSECURITYDEFINERCOMMENT''BEGINUPDATEsequenceSETcurrent_value=valueWHEREname=seq_name;RETURNcurrval(seq_name);END$DELIMITER;5.TestINSERTINTOsequenceVALUES('hwb_Seq',0,1);--添加一个序列名和初始值,并自增AL('SeqbSEwSETVLE'',10);--设置指定序列的初始值SELECTCURRVAL('hwb_Seq');--查询指定序列的当前值SELECTNEXTVAL('hwb_Seq');--查询指定序列的下一个值这里,hwb_Seq可以看作是一个表名,插入指定序列的第一个序列通过insert语句查询表,然后使用NEXTVAL方法不断更新这一列数据,获取下一个序列的值。利用这张表可以实现N张表的自增序列统一管理。
