Jak usunąć wszystkie tabele MySQL z wiersza poleceń bez uprawnień DROP database? [duplikat]
To pytanie ma już odpowiedź tutaj:
- MySQL upuść wszystkie tabele, ignorując klucze obce 21 odpowiedzi
Jak usunąć wszystkie tabele w Windows MySQL, używając wiersza polecenia? Powodem, dla którego chcę to zrobić, jest to, że nasz użytkownik ma dostęp do dropów bazy danych, ale nie ma dostępu do ponownego tworzenia samej bazy danych, z tego powodu musimy upuścić tabele ręcznie. Czy jest sposób, aby rzucić wszystkie stoły na raz? Należy pamiętać, że większość tabel jest powiązana z kluczami obcymi, więc muszą być upuszczone w określonej kolejności.
5 answers
Możesz wygenerować instrukcję w następujący sposób: DROP TABLE t1, t2, t3, ...
a następnie użyć gotowych instrukcji do jej wykonania:
SET FOREIGN_KEY_CHECKS = 0;
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables
FROM information_schema.tables
WHERE table_schema = 'database_name'; -- specify DB name here.
SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-14 08:22:18
Wersja @ Devart jest poprawna, ale oto kilka ulepszeń, aby uniknąć błędów. Edytowałem odpowiedź @ Devart, ale nie została ona przyjęta.
SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables
FROM information_schema.tables
WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@tables,'dummy') INTO @tables;
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
Ten skrypt nie spowoduje błędu z wynikiem NULL w przypadku, gdy wszystkie tabele w bazie danych zostały już usunięte przez dodanie przynajmniej jednej nieistniejącej tabeli - "dummy".
I naprawiono w przypadku, gdy masz wiele tabel.
I ta mała zmiana na drop all view istnieje w Bazie Danych
SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @views = NULL;
SELECT GROUP_CONCAT('`', TABLE_NAME, '`') INTO @views
FROM information_schema.views
WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@views,'dummy') INTO @views;
SET @views = CONCAT('DROP VIEW IF EXISTS ', @views);
PREPARE stmt FROM @views;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
Zakłada, że uruchamiasz skrypt z bazy danych, którą chcesz usunąć. Lub uruchom to wcześniej:
USE REPLACE_WITH_DATABASE_NAME_YOU_WANT_TO_DELETE;
Dziękuję Steve ' owi Horvathowi za odkrycie problemu z backticks.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-13 04:57:43
Spróbuj tego.
To działa nawet dla tabel z ograniczeniami (relacje kluczy obcych). Alternatywnie możesz po prostu upuścić bazę danych i odtworzyć, ale możesz nie mieć niezbędnych uprawnień do tego.
mysqldump -u[USERNAME] -p[PASSWORD] \
--add-drop-table --no-data [DATABASE] | \
grep -e '^DROP \| FOREIGN_KEY_CHECKS' | \
mysql -u[USERNAME] -p[PASSWORD] [DATABASE]
W celu przezwyciężenia efektów sprawdzania kluczy obcych, dodaj show table
na końcu wygenerowanego skryptu i uruchom wiele razy, aż polecenie show table
spowoduje utworzenie pustego zestawu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-01 11:34:55
Możesz upuścić database
, a następnie odtworzyć za pomocą poniższego:-
mysql> drop database [database name];
mysql> create database [database name];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-10 08:21:31
Przyjęta odpowiedź nie działa w przypadku baz danych, które mają dużą liczbę tabel, np. baz danych Drupal. Zamiast tego, Zobacz skrypt tutaj: https://stackoverflow.com/a/12917793/1507877 który działa na MySQL 5.5. Uwaga: wokół linii 11 znajduje się "WHERE table_schema = SCHEMA ();" powinno to być "WHERE table_schema =' Wstaw nazwę DB, do którego nastąpi IMPORT'; "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:53