【问题标题】:How can I drop all the views from a MYSQL Database?如何从 MYSQL 数据库中删除所有视图?
【发布时间】:2012-09-13 17:32:19
【问题描述】:

我的数据库有很多视图,不可能一一删除。

我只想删除它们,因为数据库不会刷新从中选择的视图中表的结构更改。

【问题讨论】:

    标签: mysql sql-drop


    【解决方案1】:

    如果您想在 MySQL 客户端中执行此操作,您可以使用 information_schema 动态生成 DDL 语句,将它们转储到 SQL 脚本,然后执行该脚本。

    例子:

    select concat('drop view ',table_schema,'.',table_name,';') as ddl 
    into outfile '/tmp/drop_all_views.sql' 
    from information_schema.views 
    where table_schema = 'your_schema';
    
    \. /tmp/drop_all_views.sql
    

    【讨论】:

      【解决方案2】:

      在网上搜索后,我找到了一个将所有表都删除的shell脚本:http://www.cyberciti.biz/faq/how-do-i-empty-mysql-database/

      然后,我更改了该脚本以删除数据库的所有视图。 这是最终结果:

      #!/bin/bash
      PREFIX=""
      SUFFIX=""
      HOST="localhost"
      PORT="3306"
      
      while getopts p:s:h:P: OPCAO; do
          case "${OPCAO}" in
            p) PREFIX="${OPTARG}" ;;
            s) SUFFIX="${OPTARG}" ;;
            h) HOST="${OPTARG}" ;;
            P) PORT="${OPTARG}" ;;
          esac
      done
      
      shift $((OPTIND-1))
      
      MUSER="$1"
      MPASS="$2"
      MDB="$3"
      
      # Detect paths
      MYSQL=$(which mysql)
      AWK=$(which awk)
      GREP=$(which grep)
      
      if [ $# -eq 0 ]
      then
          echo "Usage: $0 [-h Host] [-P Port] [-p Prefix-View-Name] [-s Suffix-View-Name] {MySQL-User-Name} {MySQL-User-Password} {MySQL-Database-Name}"
          echo "Drops all views from a MySQL"
          exit 1
      fi
      
      TABLES=$($MYSQL -h $HOST -P $PORT -u $MUSER -p$MPASS $MDB -e "SELECT table_name FROM information_schema.views WHERE table_schema = '$MDB' AND table_name LIKE '$PREFIX%$SUFFIX';" | $AWK '{ print $1}')
      
      for t in $TABLES
      do
          echo "Deleting $t view from $MDB database..."
          $MYSQL -h $HOST -P $PORT -u $MUSER -p$MPASS $MDB -e "drop view $t"
      done
      

      此解决方案仅适用于使用类 Unix 系统的用户。

      为了调用脚本,我使用了:

      ./script.sh [-h host] [-P port] [-p prefixViewName] [-s suffixViewName] username password databaseName
      

      编辑:我改进了脚本以接受选项参数,例如主机、端口以及前缀和后缀,以过滤哪些视图将被删除。

      【讨论】:

        猜你喜欢
        • 2012-10-13
        • 2021-08-01
        • 2014-04-13
        • 2017-06-30
        • 2017-02-10
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 2011-06-06
        相关资源
        最近更新 更多