来自:mjsws > 馆藏分类
配色: 字号:
在MySQL中创建实现自增的序列
2018-07-02 | 阅:  转:  |  分享 
  
在MySQL中创建实现自增的序列(Sequence)的方法教程由于我们业务的需要,我们以前数据的使用item_id[MD5+time]的
生成方式太过冗余,我们考虑使用数字来表示,如果使用时间戳,可能会有重复的情况,我们觉得还不是那么的好,所以想到了利用一个独立的自增
的sequence来解决该问题。由于mysql和oracle不太一样,不支持直接的sequence,所以需要创建一张table来模
拟sequence的功能:首先:我们要创建--Sequence管理表?1234567DROPTABLEIFEXISTSs
equence;CREATETABLEsequence(?nameVARCHAR(30)NOTNULL,?curr
ent_valueINTNOTNULL,??incrementINTNOTNULLDEFAULT1,?PRIM
ARYKEY(name))ENGINE=InnoDB;388棋牌http://www.455573.com其次我们要
创建几个函数用以实现对表的操作:1创建--取当前值的函数?12345678910111213141516171819DROPF
UNCTIONIFEXISTScurrval;DELIMITER$CREATEFUNCTIONcurrval(s
eq_nameVARCHAR(30))?RETURNSINTEGER?LANGUAGESQL?DETERMINISTIC
?CONTAINSSQL?SQLSECURITYDEFINER?COMMENT''''BEGIN?DECLAREvalu
eINTEGER;?SETvalue=0;?SELECTcurrent_valueINTOvalue?FROM
sequence?WHEREname=seq_name;?RETURNvalue;END$DELIMITER;2
创建--取下一个值的函数?1234567891011121314151617DROPFUNCTIONIFEXISTSnex
tval;DELIMITER$CREATEFUNCTIONnextval(seq_nameVARCHAR(50))
?RETURNSINTEGER?LANGUAGESQL?DETERMINISTIC?CONTAINSSQL?SQLS
ECURITYDEFINER?COMMENT''''BEGIN?UPDATEsequence?SETcurrent_valu
e=current_value+increment?WHEREname=seq_name;?RETURNcur
rval(seq_name);END$DELIMITER;捕鱼游戏http://www.44771.net3创建--更新
当前值的函数?1234567891011121314151617DROPFUNCTIONIFEXISTSsetval;D
ELIMITER$CREATEFUNCTIONsetval(seq_nameVARCHAR(50),valueIN
TEGER)?RETURNSINTEGER?LANGUAGESQL?DETERMINISTIC?CONTAINSSQL
?SQLSECURITYDEFINER?COMMENT''''BEGIN?UPDATEsequence?SETcurre
nt_value=value?WHEREname=seq_name;?RETURNcurrval(seq_name
);END$DELIMITER;(注:关于DELIMITER;可以点击这里)最后:我们要用以下数据设置创建的sequenc
e名称以及设置初始值和获取当前值和下一个值。?1234INSERTINTOsequenceVALUES(''item_id
'',0,1);??#插入一条数据,添加一个sequence名称和初始值,以及自增幅度SELECTSETVAL(''item_
id'',10);???????????????????#设置指定sequence的初始值SELECTCURRVAL(''ite
m_id'');??????????????????????#查询指定sequence的当前值SELECTNEXTVAL(''it
em_id'');??????????????????????#查询指定sequence的下一个值最最后就是我们使用python
去调用?12345678910111213141516171819importpymysql?#打开数据库连接(ip/数据库
用户名/登录密码/数据库名)db=pymysql.connect("localhost","root","xxxx","
xxxxx")#使用cursor()方法创建一个游标对象cursorcursor=db.cursor()#使用ex
ecute()?方法执行SQL查询cursor.execute("SELECTNEXTVAL(''item_id'');")#
使用fetchone()方法获取单条数据.data=cursor.fetchone()db.commit()print(
"Databaseversion:%s"%data)print(type(data))????????????????
????????????#?这里返回的是一个tuple类型?num=list(data)[0]????????????
??????????????#?如果我们想需要其他类型可以直接转换一下?或者l?ist或者?strprint(num)print(type(num))?????????????????????????????#?这里取了一个int类型?#关闭数据库连接棋牌评测网http://www.77884.netdb.close()
献花(0)
+1
(本文系mjsws首藏)