社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

Ken Grigsby • 7 年前 • 2121 次点击  

在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    7 年前

在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    7 年前

尝试

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