如何删除mysql 8.0数据库中的多个事件?它在5.7中工作,但在8.0中不工作?

时间:2018-11-22 06:16:47

标签: mysql

是否有可能使用单个查询删除多个事件?我知道,我们可以使用show events获取事件列表,并删除带有名称的单个事件。

在mysql 5.7或最低版本中,这是可能的,但我使用的是mysql 8.0。

1 个答案:

答案 0 :(得分:0)

我建议使用MySQL Shell-一次关闭即可使用(使用Python模式):

mysqlsh> \py

mysql-py> i_s = session.get_schema("information_schema")

mysql-py> events = i_s.EVENTS \
       ->             .select("sys.quote_identifier(EVENT_SCHEMA) AS EventSchema", "sys.quote_identifier(EVENT_NAME) AS EventName") \
       ->             .where("EVENT_SCHEMA = 'db1'").execute().fetch_all();

mysql-py> events
[
    [
        "`db1`",
        "`event1`"
    ], 
    [
        "`db1`",
        "`event2`"
    ], 
    [
        "`db1`",
        "`event``3`"
    ]
]

mysql-py> sql_fmt = "DROP EVENT {0}.{1}"
mysql-py> for event in events:
       ->     print(sql_fmt.format(*event))
       ->     session.sql(sql_fmt.format(*event)).execute()
       ->
DROP EVENT `db1`.`event1`
DROP EVENT `db1`.`event2`
DROP EVENT `db1`.`event``3`
Query OK, 0 rows affected (0.0038 sec)

有关更全面的解释和创建更通用的实用程序的示例,另请参见https://mysql.wisborg.dk/2018/12/02/mysql-8-drop-several-stored-events-procedures-or-functions/