日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 事件计划区别_MySQL 计划事件

發布時間:2024/9/3 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 事件计划区别_MySQL 计划事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL 計劃事件

簡介:在本教程中,您將了解MySQL事件調度程序以及如何創建MySQL事件以自動執行數據庫任務。

MySQL事件是基于預定義的計劃運行的任務,因此有時它被稱為計劃事件。MySQL事件也稱為“時間觸發器”,因為它是由時間觸發的,而不是像觸發器那樣的表更新。MySQL事件類似于UNIX中的cron作業或Windows中的任務調度程序。

您可以在許多情況下使用MySQL事件,例如優化數據庫表,清理日志,歸檔數據或在非高峰時間生成復雜報告。

MySQL事件調度程序配置

MySQL使用一個稱為事件調度線程的特殊線程來執行所有調度事件。您可以通過執行以下命令來查看事件調度程序線程的狀態:

SHOW PROCESSLIST;

+------+------+-----------+-----------+---------+------+-------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+------+------+-----------+-----------+---------+------+-------+------------------+

| 2040 | root | localhost | mysqldemo | Query | 0 | init | SHOW PROCESSLIST |

+------+------+-----------+-----------+---------+------+-------+------------------+

1 row in set (0.01 sec)

默認情況下,未啟用事件調度程序線程。要啟用和啟動事件調度程序線程,您需要執行以下命令:

SET GLOBAL event_scheduler = ON;

現在,要查看事件調度程序線程的狀態,請SHOW PROCESSLIST再次執行??命令。

SHOW PROCESSLIST;

+------+-----------------+-----------+-----------+---------+------+------------------------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+------+-----------------+-----------+-----------+---------+------+------------------------+------------------+

| 2040 | root | localhost | mysqldemo | Query | 0 | init | SHOW PROCESSLIST |

| 2048 | event_scheduler | localhost | NULL | Daemon | 5 | Waiting on empty queue | NULL |

+------+-----------------+-----------+-----------+---------+------+------------------------+------------------+

2 rows in set (0.00 sec)

要禁用和停止事件調度程序線程的事件,請執行SET GLOBAL命令,其中event_scheduler的值為OFF:

SET GLOBAL event_scheduler = OFF;

創建新的MySQL事件

創建事件與創建其他數據庫對象(如存儲過程或觸發器)類似。事件是一個包含SQL語句的命名對象。

存儲過程只在調用時才執行; 一個觸發時與表相關聯的事件被執行,例如插入,更新,或刪除而事件可以一次或更多規則的間隔執行發生的事件。

要創建和計劃新事件,請使用以下??CREATE EVENT語句:

CREATE EVENT [IF NOT EXIST] event_name

ON SCHEDULE schedule

DO

event_body

讓我們更詳細地研究一下這個陳述。

首先,在CREATE EVENT子句后指定事件名稱??。事件名稱在數據庫模式中必須是唯一的。

其次,你在ON SCHEDULE條款之后加上一個時間表??。如果事件是一次性事件,則使用以下語法:AT timestamp [+ INTERVAL]。如果事件是重復事件,則使用以下EVERY子句:EVERY interval STARTS timestamp [+INTERVAL] ENDS timestamp [+INTERVAL]

第三,將SQL語句放在DO關鍵字之后。請注意,您可以在事件正文中調用存儲過程。如果您有復合SQL語句,可以將它們包裝在一個??BEGIN END塊中。

讓我們看幾個創建事件的例子來理解上面的語法。

要創建和計劃將消息插入名為messages的表的新一次性事件,請執行以下步驟:

首先,使用??CREATE TABLE語句創建一個messages命名的新表,如下所示:

CREATE TABLE IF NOT EXISTS messages (

id INT PRIMARY KEY AUTO_INCREMENT,

message VARCHAR(255) NOT NULL,

created_at DATETIME NOT NULL

);

其次,使用以下CREATE EVENT語句創建事件??:

CREATE EVENT IF NOT EXISTS test_event_01

ON SCHEDULE AT CURRENT_TIMESTAMP

DO

INSERT INTO messages(message,created_at)

VALUES('Test MySQL Event 1',NOW());

三,檢查messages表;?你會看到我們有1條記錄。這意味著事件在創建時執行。

SELECT * FROM messages;

+----+--------------------+---------------------+

| id | message | created_at |

+----+--------------------+---------------------+

| 1 | Test MySQL Event 1 | 2019-08-24 00:58:51 |

+----+--------------------+---------------------+

1 row in set (0.00 sec)

要顯示數據庫模式的所有事件,請使用以下語句:

SHOW EVENTS FROM mysqldemo;

mysql> SHOW EVENTS FROM mysqldemo;

Empty set (0.00 sec)

我們沒有看到任何行返回,因為事件在過期時會自動刪除。在我們的例子中,它是一次性事件,并在執行完成時過期。

要更改此行為,可以使用??ON COMPLETION PRESERVE子句。以下語句創建另一個一次性事件,事件在創建時間為1分鐘后執行,并且在執行后不會被刪除。

CREATE EVENT test_event_02

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE

ON COMPLETION PRESERVE

DO

INSERT INTO messages(message,created_at)

VALUES('Test MySQL Event 2',NOW());

等待1分鐘,檢查消息表,添加了另一條記錄:

SELECT * FROM messages;

+----+--------------------+---------------------+

| id | message | created_at |

+----+--------------------+---------------------+

| 1 | Test MySQL Event 1 | 2019-08-24 00:58:51 |

| 2 | Test MySQL Event 2 | 2019-08-24 01:03:51 |

+----+--------------------+---------------------+

2 rows in set (0.00 sec)

如果我們再次執行 SHOW EVENTS 語句,我們會看到事件是因為ON COMPLETION PRESERVE子句的效果??:

SHOW EVENTS FROM mysqldemo;

+-----------+---------------+----------------+-----------+----------+---------------------+----------------+----------------+--------+------+----------+------------+----------------------+----------------------+--------------------+

| Db | Name | Definer | Time zone | Type | Execute at | Interval value | Interval field | Starts | Ends | Status | Originator | character_set_client | collation_connection | Database Collation |

+-----------+---------------+----------------+-----------+----------+---------------------+----------------+----------------+--------+------+----------+------------+----------------------+----------------------+--------------------+

| mysqldemo | test_event_02 | root@localhost | SYSTEM | ONE TIME | 2019-08-24 01:02:21 | NULL | NULL | NULL | NULL | DISABLED | 1 | utf8 | utf8_general_ci | utf8mb4_general_ci |

+-----------+---------------+----------------+-----------+----------+---------------------+----------------+----------------+--------+------+----------+------------+----------------------+----------------------+--------------------+

1 row in set (0.00 sec)

以下語句創建一個每分鐘執行一次的重復事件,并在創建時間后的1小時內過期:

CREATE EVENT test_event_03

ON SCHEDULE EVERY 1 MINUTE

STARTS CURRENT_TIMESTAMP

ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR

DO

INSERT INTO messages(message,created_at)

VALUES('Test MySQL recurring Event',NOW());

請注意,我們使用STARTS和ENDS子句來定義事件的有效期。您可以通過等待幾分鐘并檢查messages表來測試此重復事件。

SELECT * FROM messages;

+----+----------------------------+---------------------+

| id | message | created_at |

+----+----------------------------+---------------------+

| 1 | Test MySQL Event 1 | 2019-08-24 00:58:51 |

| 2 | Test MySQL Event 2 | 2019-08-24 01:03:51 |

| 3 | Test MySQL recurring Event | 2019-08-24 01:06:16 |

| 4 | Test MySQL recurring Event | 2019-08-24 01:07:16 |

...

刪除MySQL事件

要刪除現有事件,請使用以下??DROP EVENT語句:

DROP EVENT [IF EXIST] event_name;

例如,要刪除??test_event_03事件,請使用以下語句:

DROP EVENT [IF EXIST] test_event_03;

在本教程中,您了解了MySQL事件,如何從數據庫模式創建和刪除事件。在下一個教程中,我們將向您展示如何更改現有事件。

總結

以上是生活随笔為你收集整理的mysql 事件计划区别_MySQL 计划事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。