码迷,mamicode.com
首页 > 数据库 > 详细

关于在mysql中产生流水号

时间:2015-03-27 21:57:09      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

原文:

  http://xm-koma.iteye.com/blog/1961793

  http://www.3lian.com/edu/2013/08-30/93449.html

MySql模拟Oracle的序列

第一步:创建--Sequence 管理表

DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB;

第二步:创建--取当前值的函数

DROP FUNCTION IF EXISTS currval;
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ‘‘
BEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_name;
RETURN value;
END
$
DELIMITER ;

 

第三步:创建--取下一个值的函数

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
UPDATE sequence
SET current_value = current_value + increment
WHERE name = seq_name;
RETURN currval(seq_name);
END
$
DELIMITER ;

第四步:创建--更新当前值的函数

DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ‘‘
BEGIN
UPDATE sequence
SET current_value = value
WHERE name = seq_name;
RETURN currval(seq_name);
END
$
DELIMITER ;

第五步:测试函数功能

当上述四步完成后,可以用以下数据设置需要创建的sequence名称以及设置初始值和获取当前值和下一个值。

INSERT INTO sequence VALUES (TestSeq, 0, 1);----添加一个sequence名称和初始值,以及自增幅度
SELECT SETVAL(TestSeq, 10);---设置指定sequence的初始值
SELECT CURRVAL(TestSeq);--查询指定sequence的当前值
SELECT NEXTVAL(TestSeq);--查询指定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则就搞定了。

 

关于在mysql中产生流水号

标签:

原文地址:http://www.cnblogs.com/lemontee/p/4372776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!