原文:
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 計畫任務重啟後消失
我們只要修改一配置即可
event_scheduler在mysql的config中設定為off有關。去mysql中將配置改為on則就搞定了。
mysql 觸發器流水號 建立生成流水號的觸發器
create table test id varchar 18 流水號,日期 8位 時間 4位 流水號 4位 name varchar 10 其他字段 go 建立生成流水號的觸發器 create trigger t insert on test instead of insert asdeclare...
產生十六進製制的流水號
產生十六進製制的流水號 需求如下 求乙個function,用 0 9,a f 這幾個數字及字母,產生流水號,產生的資料如下 格式 00000,00001,00002,00003,00004,00005,00006,00007,00008,00009,0000a,0000b,0000c,0000d,0...
MySQL獲取流水號儲存過程
通過事務機制,可保證流水號的更新和讀取的完整性。delimiter 獲取流水號 drop procedure if exists get sid create procedure get sid para domain varchar 20 out para sid bigint unsigned ...