如何使用mysql query/command从mysql数据库中删除所有视图?

DEV*_*OPS 12 mysql database views

我需要从我的mysql数据库中删除所有视图.我怎么能用查询呢?

有人可以帮我吗?

Ste*_*las 18

我一直在用这个:

/* DROP ALL VIEWS */

SET @views = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @views
 FROM information_schema.views 
 WHERE table_schema = @database_name; -- Your DB name here 

SET @views = IFNULL(CONCAT('DROP VIEW ', @views), 'SELECT "No Views"');
PREPARE stmt FROM @views;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Run Code Online (Sandbox Code Playgroud)

  • 不错的剧本,谢谢。由于 GROUP_CONCAT,类似于 SET GLOBAL group_concat_max_len = 1000000; 可能有用。 (2认同)
  • 我必须“设置@@group_concat_max_len = 100000;”才能正常工作!如果您有 100 个视图,并且架构名称加视图名称的长度超过 10 个字符,则您可以轻松通过默认的 1024 个限制。 (2认同)

use*_*692 7

引用MySQL参考手册:

DROP VIEW [IF EXISTS]
    view_name [, view_name] ...
    [RESTRICT | CASCADE]
Run Code Online (Sandbox Code Playgroud)

DROP VIEW删除一个或多个视图.您必须拥有DROP每个视图的权限.如果参数列表中指定的任何视图不存在,MySQL将返回一个错误,指出它无法删除哪些不存在的视图,但它也会丢弃列表中存在的所有视图.

IF EXISTS子句可防止对不存在的视图发生错误.给出此子句时,NOTE将为每个不存在的视图生成a .请参见第12.7.5.41节"显示警告语法".

RESTRICT并且CASCADE,如果给定,则被解析并被忽略.

  • 我想他正在问如何以自动方式放弃一切.不是如何为任意数量的视图手动查找和写入drop语句. (4认同)