Py学习  »  DATABASE

mysql 8-删除特定数据库中的所有存储过程

Ken Grigsby • 7 年前 • 2148 次点击  

在mysql 8中,数据库表'mysql`.`proc'不存在。以前我使用此表删除/删除/清除所有存储过程,并从源版本代码中重新创建它们。这非常有效,以确保在进入生产之前将开发存储过程保存到源版本控制中。

在8之前的MySQL版本中,此SQL查询工作正常。

从'mysql`.`proc`删除,其中'type`='procedure'和'db`='test';

在一条语句中是否有其他方法来实现查询结果?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39050
文章 [ 3 ]  |  最新文章 7 年前
jkrogh
Reply   •   1 楼
jkrogh    7 年前

我建议使用mysql shell-下面的示例使用python模式:

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/ .

Madhur Bhaiya
Reply   •   2 楼
Madhur Bhaiya    8 年前

在mysql 8.0中,可以通过 Routines 表 INFORMATION_SCHEMA . 以下几点值得注意:

例程表提供有关存储的例程(存储的 过程和存储函数)。例程表不包括 内置SQL函数或用户定义函数(UDF)。

现在,这里需要使用例程表中的以下两列:

ROUTINE_SCHEMA -该例程所属的架构(数据库)的名称。

ROUTINE_TYPE -存储过程的过程,存储函数的函数。

关于进一步调查利用 SHOW CREATE TABLE information_schema.routines ,发现是 临时表

因此,为了删除 test 数据库,我们可以使用以下查询:

DELETE FROM information_schema.routines 
WHERE routine_type = 'PROCEDURE' AND 
      routine_schema = 'test'

Adas
Reply   •   3 楼
Adas    8 年前

尝试

   delete from mysql.proc WHERE db LIKE <yourDbName>;