原文:
http://xm-koma.iteye.com/blog/1961793
http://www.3lian.com/edu/2013/08-30/93449.html
MySql模拟Oracle的序列
第一步:创建--Sequence 管理表
DROP TABLE IF EXISTSts_sequence;CREATE TABLEts_sequence (
sequence_nameVARCHAR(50) NOT NULL,
current_valueINT NOT NULL,
incrementINT NOT NULL DEFAULT 1,PRIMARY KEY(sequence_name)
) ENGINE=InnoDB;
第二步:创建--取当前值的函数
DROP FUNCTION IF EXISTScurrval;
DELIMITER $CREATE FUNCTION currval (seq_name VARCHAR(50))RETURNS INTEGERLANGUAGE SQL
DETERMINISTICCONTAINSSQL
SQL SECURITY DEFINER
COMMENT''
BEGIN
DECLARE sequence_value INTEGER;SET sequence_value = 0;SELECT current_value INTOsequence_valueFROMts_sequenceWHERE sequence_name =seq_name;RETURNsequence_value;END$
DELIMITER ;
第三步:创建--取下一个值的函数
DROP FUNCTION IF EXISTSnextval;
DELIMITER $CREATE FUNCTION nextval (seq_name VARCHAR(50))RETURNS INTEGERLANGUAGE SQL
DETERMINISTICCONTAINSSQL
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;
UPDATEts_sequenceSET current_value = current_value +incrementWHERE sequence_name =seq_name;RETURNcurrval(seq_name);END$
DELIMITER ;
第四步:创建--更新当前值的函数
DROP FUNCTION IF EXISTSsetval;
DELIMITER $CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)RETURNS INTEGERLANGUAGE SQL
DETERMINISTICCONTAINSSQL
SQL SECURITY DEFINER
COMMENT''
BEGIN
UPDATEts_sequenceSET current_value =valueWHERE sequence_name =seq_name;RETURNcurrval(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 PROCEDUREtest ()BEGIN
update examinfo SET endtime = now() WHERE id = 14;END;
创建event e_test
代码如下
create event if not existse_teston schedule every 30secondoncompletion preserve
do call test();
每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.
关闭事件任务
代码如下
alter event e_test ONCOMPLETION PRESERVE DISABLE;
开户事件任务
代码如下
alter event e_test ONCOMPLETION PRESERVE ENABLE;
以上测试均成功,测试环境为mysql 5.4.2-beta-community mysql community server(GPL)
以上的相关内容就是对MySQL定时执行的介绍,望你能有所收获。
mysql 计划任务重启后消失
我们只要修改一配置即可
event_scheduler在mysql的config中设置为OFF有关。去mysql中将配置改为ON则就搞定了。