在mysql 8中,数据库表mysql.
proc不存在。以前,我使用此表删除/删除/清除所有存储过程,并从源版本代码中重新创建它们。这可以很好地确保开发存储过程在进入生产之前保存到源版本控制中。 在8之前的mysql版本中,此sql查询有效。 从“mysql”中删除“proc”,其中“type
='procedure'和“db`='test';
有没有其他方法可以在一条语句中实现查询结果?
答案是你不能。但是您可以生成所有drop语句并执行它们。
我现在使用下面的sql一次为存储过程、存储函数、事件和触发器创建所有drop语句。为了便于重用,我使用了函数“database()”。您可以用数据库名称字符串“dbname”替换“database()”,它将在phpmyadmin中工作。
SELECT CONCAT("DROP ",`item`.`ROUTINE_TYPE`," IF EXISTS `",DATABASE(),"`.`",`item`.`ROUTINE_NAME`,"`;") as `stmt`
FROM `information_schema`.`ROUTINES` AS `item`
WHERE `item`.`ROUTINE_SCHEMA` = DATABASE()
UNION
SELECT CONCAT("DROP EVENT IF EXISTS `",DATABASE(),"`.`",`item`.`EVENT_NAME`,"`;") AS `stmt`
FROM `information_schema`.`EVENTS` AS `item`
WHERE `item`.`EVENT_SCHEMA` = DATABASE()
UNION
SELECT CONCAT("DROP TRIGGER IF EXISTS `",DATABASE(),"`.`",`item`.`TRIGGER_NAME`,"`;") AS `stmt`
FROM `information_schema`.`TRIGGERS` AS `item`
WHERE `item`.`TRIGGER_SCHEMA` = DATABASE();
4条答案
按热度按时间mnemlml81#
在mysql 8.0中,存储过程(例程)的详细信息可以通过
INFORMATION_SCHEMA
. 以下几点值得注意:例程表提供有关存储例程(存储过程和存储函数)的信息。routines表不包括内置sql函数或用户定义函数(udf)。
现在,这里需要使用routines表中的以下两列:
ROUTINE_SCHEMA
-例程所属的架构(数据库)的名称。ROUTINE_TYPE
-存储过程的过程,存储函数的函数。关于进一步利用
SHOW CREATE TABLE information_schema.routines
,发现它是一个临时表因此,为了删除
test
数据库中,我们可以使用以下查询:ryevplcw2#
我建议使用mysql shell-以下示例使用python模式:
更多讨论请参见https://mysql.wisborg.dk/2018/12/02/mysql-8-drop-several-stored-events-procedures-or-functions/ .
9nvpjoqh3#
我认为你的问题的答案是,这不能在一个声明中完成。
使用以下语句生成drop语句列表可能会有所帮助:
wnvonmuf4#
尝试