《在MySQL中创建实现自增的序列》由会员分享,可在线阅读,更多相关《在MySQL中创建实现自增的序列(4页珍藏版)》请在金锄头文库上搜索。
1、在在 MySQLMySQL 中创建实现自增的序列(中创建实现自增的序列(SequenceSequence)的方法教程)的方法教程由于我们业务的需要,我们以前数据的使用 item_id MD5+time 的生成方式太过冗余,我们考虑使用数字来表示,如果使用时间戳,可能会有重复的情况,我们觉得还不是那么的好,所以想到了利用一个独立的自增的 sequence 来解决该问题。由于 mysql 和oracle 不太一样,不支持直接的 sequence,所以需要创建一张 table 来模拟 sequence 的功能:首先:首先:我们要创建-Sequence 管理表? 1 2 3 4 5 6 7DROP T
2、ABLE IF EXISTS sequence; CREATE TABLE sequence ( name VARCHAR(30) NOT NULL, current_value INT NOT NULL, increment INT NOT NULL DEFAULT 1, PRIMARY KEY (name) ) ENGINE=InnoDB; 388 棋牌 http:/其次我们要创建几个函数用以实现对表的操作:其次我们要创建几个函数用以实现对表的操作:1 1 创建创建-取当前值的函数取当前值的函数? 1 2 3 4 5 6 7 8 9 10 11 12 13DROP FUNCTION IF
3、EXISTS currval; DELIMITER $ CREATE FUNCTION currval (seq_name VARCHAR(30) RETURNS INTEGERLANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT BEGINDECLARE value INTEGER; SET value = 0; SELECT current_value INTO value 14 15 16 17 18 19FROM sequenceWHERE name = seq_name; RETURN value;
4、END $ DELIMITER ;2 2 创建创建-取下一个值的函数取下一个值的函数? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17DROP FUNCTION IF EXISTS nextval; DELIMITER $ CREATE FUNCTION nextval (seq_name VARCHAR(50) RETURNS INTEGERLANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT BEGINUPDATE sequenceSET current_value =
5、current_value + increment WHERE name = seq_name; RETURN currval(seq_name); END $ DELIMITER ; 捕鱼游戏 http:/3 3 创建创建-更新当前值的函数更新当前值的函数? 1 2 3 4 5 6 7 8 9 10 11 12 13DROP FUNCTION IF EXISTS setval; DELIMITER $ CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER) RETURNS INTEGERLANGUAGE SQL DETERMI
6、NISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT BEGINUPDATE sequenceSET current_value = value WHERE name = seq_name; 14 15 16 17RETURN currval(seq_name); END $ DELIMITER ;(注:关于(注:关于 DELIMITER;DELIMITER;可以点击这里)可以点击这里)最后:最后:我们要用以下数据设置 创建的 sequence 名称 以及设置初始值和获取当前值和下一个值。? 1 2 3 4INSERT INTO sequence V
7、ALUES (item_id, 0, 1); #插入一条数据,添加一个 sequence 名称和初始值,以及自增幅度 SELECT SETVAL(item_id, 10); #设置指定 sequence 的初 始值 SELECT CURRVAL(item_id); #查询指定 sequence 的当 前值 SELECT NEXTVAL(item_id); #查询指定 sequence 的下 一个值最最后最最后 就是我们使用就是我们使用 pythonpython 去调用去调用? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17import pymysql# 打开
8、数据库连接(ip/数据库用户名/登录密码/数据库名)db = pymysql.connect(“localhost“, “root“, “xxxx“, “xxxxx“) # 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor() # 使用 execute() 方法执行 SQL 查询cursor.execute(“SELECT NEXTVAL(item_id);“) # 使用 fetchone() 方法获取单条数据.data = cursor.fetchone() mit() print(“Database version : %s “ % data) print(type(data) # 这里返回的是一个 tuple 类型 num = list(data)0 # 如果我们想需要 其他类型 可以直接转换一下 或者 l ist 或者 strprint(num)18 19print(type(num) # 这里取了一个 int 类型# 关闭数据库连接 棋牌评测网 http:/db.close()