mysql -- 事件

MySQL的EVENTS是用来处理计划任务的。MySQL使用称为事件调度线程的特殊线程来执行所有预定事件。默认情况下,事件调度线程是未启用(版本低于8.0.3)的状态,

如要启用它,可以执行以下命令:

> SET GLOBAL event_scheduler = ON ;

> show variables like '%event_scheduler%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+

假设不再需要保留一个月之前的薪水审计记录,则可以设定一个每日运行的事件,用它从salary_audit 表中删除一个月之前的记录。 purge [pɜːrdʒ] 净化

# schedule [ˈskedʒuːl] 日程安排
DROP EVENT IF EXISTS purge_salary_audit; 
DELIMITER $$
CREATE EVENT IF NOT EXISTS purge_salary_audit ON SCHEDULE 
	EVERY 1 DAY 
	STARTS CURRENT_DATE
	DO BEGIN 
		DELETE FROM salary_audit WHERE date_modified < DATE_ADD(CURDATE(),INTERVAL-30 day);
	END $$
DELIMITER ; 

查看事件:

> SHOW EVENTS\G;
*************************** 1. row ***************************
                  Db: mysql
                Name: purge_salary_audit
             Definer: root@localhost
           Time zone: SYSTEM
                Type: RECURRING
          Execute at: NULL
      Interval value: 1
      Interval field: DAY
              Starts: 2018-01-01 02:00:00
                Ends: NULL
              Status: ENABLED
          Originator: 0
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

要检查事件的定义,可以执行:

> SHOW CREATE EVENT purge_salary_audit \G
***********************************1. row****************************************
						Event: event_ _delete_ _de_ records_ 7 days
					sq1_ mode: NO_ AUTO_ .CREATE_ USER, NO_ ENGINE_ SUBST
				   time_ zone : SYSTEM 
				Create Event: CREATE DEFINER=^ root^ @、localhosti E
	STARTS 2018-01-01 02:00:00' ON COMPL ETION NOT PRESERVE
URRENT_ _T IMESTAMP,INTERVAL 7 DAY )
character_ set_client: utf8 
collation_ connection: utf8_genera1_ci
   Database Collation: utf8_ genera1_ci
1 row in set (0.00sec)

要禁用/启用该事件,可以执行以下操作:

> ALTER EVENT purge_salary_audit DISABLE;
> ALTER EVENT purge_salary_audit ENABLE;

访问控制

​ 所有存储的程序(过程、函数、触发器和事件)和视图都有一个DEFINER //dɪˈfaɪnr// 。如果未指定DEFINER,则创建该对象的用户将被选为DEFINER。

​ 存储例程(包括过程和函数)和视图具有值为DEFINER或INVOKER的SQL SECURITY特性,来指定对象是在definer还是在invoker上下文中执行。触发器和事件没有SQL SECURITY特性,并且始终在definer上下文中执行。服务器根据需要自动调用这些对象,因此不存在调用用户。

posted @ 2023-05-03 18:52  _泡泡  阅读(111)  评论(0)    收藏  举报