在MySQL 8中,数据库表mysql.proc不存在。在此之前,我使用此表删除/删除/清除所有存储过程,并从源代码版本代码中重新创建它们。这样可以很好地确保在投入生产之前将存储过程保存到源代码版本控制中。
在8岁之前的MySQL版本中,此SQL查询工作正常。
从
mysql.proc中删除type=‘type’和db= 'test';
是否有其他方法在一条语句中实现查询的结果?
答案是你不能,但是你可以生成所有的drop语句并执行它们。
现在,我使用以下SQL创建存储过程、存储函数、事件和触发器的所有drop语句。为了便于重用,我使用了函数"DATABASE()“。您可以将" database ()“替换为数据库名称字符串"dbName”,并且它将在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();发布于 2019-09-04 02:38:10
我认为你的问题的答案是,这不能在一次发言中做到。
使用以下语句生成DROP语句列表可能会有所帮助:
SET group_concat_max_len = 4294967295;
SELECT group_concat('DROP PROCEDURE IF EXISTS ', r.routine_name, ';\n' ORDER BY r.routine_name SEPARATOR '') AS DROP_STATEMENTS
FROM information_schema.routines r
WHERE r.routine_schema = database() AND r.routine_type = 'PROCEDURE';发布于 2018-12-02 21:08:06
我建议使用MySQL Shell -下面的示例使用模式:
mysqlsh> \py
mysql-py> i_s = session.get_schema("information_schema")
mysql-py> functions = i_s.ROUTINES \
-> .select("sys.quote_identifier(ROUTINE_SCHEMA) AS RoutineSchema", "sys.quote_identifier(ROUTINE_NAME) AS RoutineName") \
-> .where("ROUTINE_SCHEMA = 'db1' AND ROUTINE_TYPE = 'FUNCTION'").execute().fetch_all()
mysql-py> functions
[
[
"`db1`",
"`func1`"
],
[
"`db1`",
"`func2`"
],
[
"`db1`",
"`func``3`"
]
]
mysql-py> for function in functions:
-> print(sql_fmt.format(*function))
-> session.sql(sql_fmt.format(*function)).execute()
->
DROP FUNCTION `db1`.`func1`
DROP FUNCTION `db1`.`func2`
DROP FUNCTION `db1`.`func``3`
Query OK, 0 rows affected (0.0684 sec)有关更多的讨论,请参见https://mysql.wisborg.dk/2018/12/02/mysql-8-drop-several-stored-events-procedures-or-functions/。
发布于 2018-11-08 21:28:47
试一试
delete from mysql.proc WHERE db LIKE <yourDbName>;https://stackoverflow.com/questions/53215801
复制相似问题