Necesito eliminar todas las vistas de mi base de datos mysql. ¿Cómo puedo hacer eso usando la consulta?¿Cómo borrar todas las vistas de la base de datos mysql usando mysql query/command?
¿Alguien puede ayudarme, por favor?
Necesito eliminar todas las vistas de mi base de datos mysql. ¿Cómo puedo hacer eso usando la consulta?¿Cómo borrar todas las vistas de la base de datos mysql usando mysql query/command?
¿Alguien puede ayudarme, por favor?
Citando MySQL Reference Manual:
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]
DROP VIEW
elimina uno o más puntos de vista. Debe tener el privilegio DROP
para cada vista. Si alguna de las vistas nombradas en la lista de argumentos no existe, MySQL devuelve un error que indica por nombre qué vistas no existentes no pudo eliminar, pero también descarta todas las vistas en la lista que sí existen.
La cláusula IF EXISTS
evita que se produzca un error para las vistas que no existen. Cuando se da esta cláusula, se genera un NOTE
para cada vista inexistente. Consulte Sección 12.7.5.41, "SHOW WARNINGS Sintaxis".
RESTRICT
y CASCADE
, si se proporcionan, se analizan e ignoran.
tratar este código no probado
DECLARE VIEW_NAME VARCHAR(31);
DECLARE VIEW_NAMES CURSOR
FOR
SELECT table_name
FROM information_schema.views;
WHERE table_schema = 'DB_Name'
OPEN VIEW_NAMES;
REPEAT
FETCH VIEW_NAMES INTO VIEW_NAME;
DROP VIEW VIEW_NAME
UNTIL done END REPEAT;
CLOSE VIEW_NAMES;
END;
que soltará todas las vistas en un servidor, no en un archivo db :) –
Gracias, iv actualizó el script – CloudyMarble
He aquí un método de Ruby que va a hacer lo que quiere:
# @param [Array] databases, e.g. ['db1', 'db2']
def drop_all_views(databases)
views = ActiveRecord::Base.connection.execute("SELECT CONCAT(TABLE_SCHEMA,'.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_TYPE = 'VIEW' AND TABLE_SCHEMA IN('#{databases.join("', '")}');")
views = views.to_a.flatten
# Then drop all of those views from their respective databases
views.each do |v|
ActiveRecord::Base.connection.execute("DROP VIEW IF EXISTS #{v};")
end
end
He estado usando este:
/* 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;
La mejor respuesta aquí, gracias. –
Buena secuencia de comandos, thx. Y debido a GROUP_CONCAT, algo así como SET GLOBAL group_concat_max_len = 1000000; podría ser útil. –
Tuve que 'establecer @@ group_concat_max_len = 100000;' para que esto funcione! Si tiene 100 vistas y el nombre del esquema más el nombre de la vista tiene más de 10 caracteres, puede pasar fácilmente el límite predeterminado de 1024. – Fx32
Creo que es preguntando cómo dejar todo de manera automatizada. No es cómo buscar manualmente y escribir una declaración desplegable para un número arbitrario de vistas. – Cerin