求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

MySQL触发器管理
526 次浏览
2次  

在本教程中,您将学习如何管理触发器,包括在MySQL数据库中显示,修改和删除触发器。

创建触发器后,可以在包含触发器定义文件的数据文件夹中显示其定义。触发器作为纯文本文件存储在以下数据库文件夹中:

/data_folder/database_name/table_name.trg

也可通过查询information_schema数据库中的triggers表来显示触发器,如下所示:

SELECT
*
FROM
information_schema.triggers
WHERE
trigger_schema = 'database_name'
AND trigger_name = 'trigger_name';

该语句允许您查看触发器的内容及其元数据,例如:关联表名和定义器,这是创建触发器的MySQL用户的名称。

如果要检索指定数据库中的所有触发器,则需要使用以下SELECT语句从information_schema数据库中的triggers表查询数据:

SELECT
*
FROM
information_schema.triggers
WHERE
trigger_schema = 'database_name';

要查找与特定表相关联的所有触发器,请使用以下查询:

SELECT
*
FROM
information_schema.triggers
WHERE
trigger_schema = 'database_name'
AND event_object_table = 'table_name';

例如,以下查询语句与yiibaidb数据库中的employees表相关联的所有触发器。

SELECT * FROM information_schema.triggers
WHERE trigger_schema = 'yiibaidb'
AND event_object_table = 'employees';

执行上面查询,得到以下结果 -

mysql> SELECT * FROM information_schema.triggers
WHERE trigger_schema = 'yiibaidb'
AND event_object_table = 'employees';
+-----------------+----------------+--------------
----------+
| TRIGGER_CATALOG | TRIGGER_SCHEMA | TRIGGER_NAME
| EVENT_MANIPULATION | EVENT_OBJECT_CATALOG
| EVENT_OBJECT_SCHEMA | EVENT_OBJECT_TABLE
| ACTION_ORDER | ACTION_CONDITION | ACTION_STATEMENT
| ACTION_ORIENTATION | ACTION_TIMING
| ACTION_REFERENCE_OLD_TABLE
| ACTION_REFERENCE_NEW_TABLE
| ACTION_REFERENCE_OLD_ROW
| ACTION_REFERENCE_NEW_ROW | CREATED
| SQL_MODE
| DEFINER | CHARACTER_SET_CLIENT
| COLLATION_CONNECTION
| DATABASE_COLLATION |
+-----------------+----------------+---------------
---------+
| def | yiibaidb | before_employee_update | UPDATE | def
| yiibaidb | employees | 1 | NULL | BEGIN
INSERT INTO employees_audit
SET action = 'update',
employeeNumber = OLD.employeeNumber,
lastname = OLD.lastname,
changedat = NOW();
END | ROW | BEFORE | NULL | NULL | OLD | NEW
| 2017-08-02 22:06:36.40 | ONLY_FULL_GROUP_BY,
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER
,NO_ENGINE_SUBSTITUTION
| root@localhost | utf8 | utf8_general_ci | utf8_general_ci |
+-----------------+----------------+----------------
--------+
1 row in set

MySQL SHOW TRIGGERS语句

在特定数据库中显示触发器的另一种方法是使用SHOW TRIGGERS语句,如下所示:

SHOW TRIGGERS [FROM|IN] database_name
[LIKE expr | WHERE expr];

例如,如果要查看当前数据库中的所有触发器,可以使用SHOW TRIGGERS语句,如下所示:

SHOW TRIGGERS;

要获取特定数据库中的所有触发器,请在SHOW TRIGGERS语句中指定数据库名称,比如要查询数据库:yiibaidb下的所有触发器,如下所示:

SHOW TRIGGERS FROM yiibaidb;

上面语句返回yiibaidb数据库中的所有触发器。

要获取与特定表相关联的所有触发器,可以使用SHOW TRIGGERS语句中的WHERE子句。 以下语句返回与employees表相关联的所有触发器:

SHOW TRIGGERS FROM yiibaidb
WHERE `table` = 'employees';

请注意,我们使用反引号包装table列,因为table是MySQL中的保留关键字。

当执行SHOW TRIGGERS语句时,MySQL返回以下列 -

Trigger:存储触发器的名称,例如before_employee_update触发器。

Event:指定事件,例如,调用触发器的INSERT,UPDATE或DELETE。

Table:指定触发器与例如相关联的表,如employees表。

Statement:存储调用触发器时要执行的语句或复合语句。

Timing:接受两个值:BEFORE和AFTER,它指定触发器的激活时间。

Created:在创建触发器时记录创建的时间。

sql_mode:指定触发器执行时的SQL模式。

Definer:记录创建触发器的帐户。

请注意,要执行SHOW TRIGGERS语句,您必须具有SUPER权限。

删除触发器

要删除现有的触发器,请使用DROP TRIGGER语句,如下所示:

DROP TRIGGER table_name.trigger_name;

例如,如果要删除与employees表相关联的before_employees_update触发器,则可以执行以下语句:

DROP TRIGGER employees.before_employees_update;

要修改触发器,必须首先删除它并使用新的代码重新创建。在MySQL中没有类似:ALTER TRIGGER语句,因此,您不能像修改其他数据库对象,如表,视图和存储过程那样修改触发器。

在本教程中,您已经学会了如何管理触发器,如在MySQL中显示,删除和修改触发器。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



526 次浏览
2次
 捐助