mysql产生流水号_关于在mysql中产生流水号

原文:

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则就搞定了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值