关于在mysql中产生流水号
原文:
http://xm-koma.iteye.com/blog/1961793
http://www.3lian.com/edu/2013/08-30/93449.html
MySql模拟Oracle的序列
第一步:创建--Sequence 管理表
DROP TABLE IF EXISTS ts_sequence; CREATE TABLE ts_sequence ( sequence_name VARCHAR(50) NOT NULL, current_value INT NOT NULL, increment INT NOT NULL DEFAULT 1, PRIMARY KEY (sequence_name) ) ENGINE=InnoDB;
第二步:创建--取当前值的函数
第三步:创建--取下一个值的函数
DROP FUNCTION IF EXISTS nextval; DELIMITER $ CREATE FUNCTION nextval (seq_name VARCHAR(50)) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN
DECLARE temp_current INTEGER;
SET temp_current = currval(seq_name);
IF(temp_current = 9999)
THEN UPDATE ts_sequence
SET current_value = 1000
WHERE sequence_name = seq_name;
END IF;
UPDATE ts_sequence SET current_value = current_value + increment WHERE sequence_name = seq_name; RETURN currval(seq_name); END $ DELIMITER ;
第四步:创建--更新当前值的函数
第五步:测试函数功能
当上述四步完成后,可以用以下数据设置需要创建的sequence名称以及设置初始值和获取当前值和下一个值。
INSERT INTO ts_sequence VALUES ('tm_employee', 0, 1);----添加一个sequence名称和初始值,以及自增幅度 SELECT SETVAL('tm_employee', 10);---设置指定sequence的初始值 SELECT CURRVAL('tm_employee');--查询指定sequence的当前值 SELECT NEXTVAL('tm_employee');--查询指定sequence的下一个值
MySQL定时执行脚本(计划任务)实例
查看event是否开启
代码如下
show variables like '%sche%';
将事件计划开启
代码如下
set global event_scheduler =1;
创建存储过程test
代码如下
CREATE PROCEDURE test () BEGIN update examinfo SET endtime = now() WHERE id = 14; END;
创建event e_test
代码如下
create event if not exists e_test on schedule every 30 second on completion preserve do call test();
每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.
关闭事件任务
代码如下
alter event e_test ON COMPLETION PRESERVE DISABLE;
开户事件任务
代码如下
alter event e_test ON COMPLETION PRESERVE ENABLE;
以上测试均成功,测试环境为mysql 5.4.2-beta-community mysql community server(GPL)
以上的相关内容就是对MySQL定时执行的介绍,望你能有所收获。
mysql 计划任务重启后消失
我们只要修改一配置即可
event_scheduler在mysql的config中设置为OFF有关。去mysql中将配置改为ON则就搞定了。