mysql建立儲存過程和計畫任務例項

2021-10-09 04:47:56 字數 2602 閱讀 2917

銷售訂單資料表

create

table

`sales_sales`

(`sa_id`

int(11)

notnull

auto_increment

,`sa_num`

varchar(64

)default

null

,# 訂單編碼

`sa_customid`

int(11)

default

null

,# 使用者id

`sa_orderdate`

datetime

default

null

,# 訂單日期

`sa_realcosts`

varchar(64

)default

null

,# 實付金額(折扣後金額)

`sa_totalcosts`

varchar(64

)default

null

,# 總價

`sa_remarks`

varchar

(255

)default

null

,# 備註

`sa_status`

int(11)

default

null

,# 訂單狀態,1待付款,2已付款,待發貨,3已發貨,4已收貨,5退貨中,6退貨成功,7退貨失敗,8已取消(15分鐘未付款就變成該狀態)

`sa_regtime`

timestamp

null

default

current_timestamp

,primary

key(

`sa_id`),

unique

key`sa_num`

(`sa_num`),

key`ix_sales_sales_sa_regtime`

(`sa_regtime`))

engine

=innodb

auto_increment=3

default

charset

=utf8;

drop

procedure

ifexists

`order_status_change`

;# 儲存過程存在就先刪除,這樣避免重複建立報錯

delimiter;;

create

procedure

`order_status_change`()

# 儲存過程函式名

begin

# 搜尋待付狀態(sa_status=1)且超過15分鐘未支付的訂單

select group_concat(sa_num)

into

@salesnumall

from sales_sales where sa_status=

1and

now(

)>=adddate(sa_orderdate,

interval

15minute);

# select @salesnumall; # 用作除錯

# 取消超時待付的訂單,把訂單狀態改為取消(sa_status=8)

update sales_sales set sa_status=

8where find_in_set(sa_num,

@salesnumall);

end;

;

儲存過程呼叫

call order_status_change(

);

drop event if

exists

`auto_order_status_change`

;create event `auto_order_status_change`

on schedule every 60

second starts '2020-08-14 17:28:36'

on completion preserve enable

docall order_status_change(

);

注意:建立完成後要確認mysql是否開啟了計畫任務,通過下面語句查詢

show variables like

'%event_sche%'

;

查詢結果,看到value的值是off,說明需要mysql開啟計畫任務

開啟mysql計畫任務,看到value的值是on,說明mysql開啟計畫任務成功了

set

global event_scheduler=1;

# 設定開啟mysql計畫任務

MySQL建立儲存過程

在開發過程中,經常會遇到重複使用某乙個功能的情況,為此,mysql引入了儲存過程 儲存過程 就是一條或多條sql語句的集合,當對資料庫進行一系列複雜操作時,儲存過程可以將這些複雜操縱,封裝成乙個 塊,以便重複使用,大大減少資料庫開發人員的工作量 使用create procedure語句 create...

MYSQL 建立儲存過程

無引數儲存過程 delimiter create procedure myfist proc 建立儲存過程 begin select stu id from score where grade 80 and c name 計算機 select name from student where id i...

mysql建立儲存過程

坑一 mysql建立儲存過程中,儲存過程的輸入引數變數命名不應該與欄位名相同。如果相同,導致的結果就是引數的值將不會是你傳入的值,而是變成每條記錄的那個欄位的值。如果在刪除操作時,將會刪除整張表的記錄,是非常危險的。刪除儲存過程 drop procedure if exists pro test 建...