mysql產生流水號 關於在mysql中產生流水號

2021-10-17 19:54:45 字數 2893 閱讀 8410

原文:

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 ...