在我的应用程序中,我有一个动态系统,所以我必须检查表是否已经存在,并根据需要异常创建它。如果不存在,则通过执行创建表来解决问题。
但是由于 mysql 不支持创建触发器语句中的"如果不存在",我想问一下除了删除触发器之外是否有其他解决方法?每次都放下触发器重新创建它对我来说是没有意义的,我只想创建一个丢失的触发器。此事件应发生一次,而删除和重新创建将经常发生。触发器对于审核/日志记录是必需的。
也许我们可以以 oracle 的方式做到这一点,您可以将创建 ddl 包装在开始/结束中,然后在异常 hanlder 中执行 null?
使用 CREATE TRIGGER 语句。如果触发器存在,您将获得异常,只需捕获它。
如果您不想捕获错误,那么您可以检查是否存在 -
SELECT TRIGGER_NAME
FROM information_schema.triggers
WHERE TRIGGER_SCHEMA = 'db_name' AND TRIGGER_NAME = 'trigger_name'
您可以在创建表时创建触发器,如果删除带有触发器删除失败的表,则必须在之前删除触发器。
创建表时创建触发器,如果表存在,则触发器存在
从MySQL 8.0.29开始,CREATE TRIGGER语句支持IF NOT EXISTS
:
创建触发器:
CREATE [DEFINER = user] TRIGGER [IF NOT EXISTS] trigger_name
如果不存在 可防止在同一架构中存在同一表上具有相同名称的触发器时发生错误。从MySQL 8.0.29开始的CREATE TRIGGER支持此选项。