Drop table if exists mysql что это
SQL-Ex blog
Новости сайта «Упражнения SQL», статьи и переводы
Удалить таблицу, если она существует
В рамках интерактивного (чистого) SQL избежать возникновения ошибки в этом случае не получалось. Однако проблема легко решается процедурно (T-SQL):
Встроенная функция object_id возвращает идентификатор объекта, заданного именем, или же NULL, если такого имени не существует.
И вот в SQL Server 2017 появился оператор DROP TABLE IF EXISTS, который не вызывает ошибки, если удаляемой таблицы не существует, например:
Теперь предположим, что нам нужно удалить связанные таблицы. Рассмотрим следующий пример:
id | t1_id |
---|---|
1 | 1 |
2 | 2 |
Стандартное каскадное удаление
работать не будет, т.к. оно еще не реализовано в SQL Server (но работает, например, в PostgreSQL), тогда как оператор
Если указать таблицы в неправильном порядке, т.е. t1, t2, то при удалении t1 будет получена вышеприведенная ошибка, а потом будет удалена t2.
Если среди перечисленных таблиц (не обязательно две) могут быть отсутствующие, то тогда поможет новый оператор:
который будет создавать таблицу только в том случае, если такой не существует.
Обратные ссылки
Нет обратных ссылок
Комментарии
Показывать комментарии Как список | Древовидной структурой
Автор не разрешил комментировать эту запись
Инструкция DROP IF EXISTS в языке T-SQL
В этой заметке я расскажу Вам про инструкцию DROP языка T-SQL, а именно о новом параметре этой инструкции — IF EXISTS, который появился только в 2016 версии Microsoft SQL Server.
Инструкция DROP в T-SQL
DROP – это инструкция языка T-SQL, с помощью которой удаляются объекты в Microsoft SQL Server. Если Вас интересует язык SQL, то рекомендую почитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.
DROP IF EXISTS
У инструкции DROP в Microsoft SQL Server 2016 появился дополнительный параметр IF EXISTS, который позволяет предварительно проверить существование объекта, перед его непосредственным удалением.
DROP с этим параметром значительно упрощает написание кода, так как в случае если Вам необходимо пересоздать таблицу, или просто удалить таблицу, предварительно не нужно писать различные дополнительные условные конструкции IF, чтобы проверить, существует ли эта таблица или нет. Инструкция DROP IF EXISTS сделает эту проверку сама.
Кстати, в других популярных СУБД, например, даже в бесплатной PostgresSQL, уже давно существует такая возможность, но компания Microsoft в свою СУБД добавила ее совсем недавно.
Инструкцию DROP IF EXISTS поддерживают следующие виды объектов Microsoft SQL Server (т.е. при их удалении можно использовать параметр IF EXISTS):
Пример DROP IF EXISTS – удаление таблицы или представления
Раньше, если перед удалением таблицы (или представления) необходимо было проверить, существует ли эта таблица, мы перед инструкцией по удалению таблицы (DROP) писали условную конструкцию IF в сочетании с функцией OBJECT_ID, код выглядел примерно следующим образом
Теперь условную конструкцию можно опустить, добавив вместо нее параметр IF EXISTS.
Пример DROP IF EXISTS – удаление функции
Для того чтобы проверить существует ли функция перед удалением, можно перед инструкцией удаления писать следующую условную конструкцию (часто можно встретить именно такой подход).
Теперь все гораздо проще.
Заметка! Для профессионального изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL.
MySQL DROP TABLE
Summary: in this tutorial, you will learn how to use the MySQL DROP TABLE statement to drop a table from the database.
MySQL DROP TABLE statement syntax
To remove existing tables, you use the MySQL DROP TABLE statement.
Here is the basic syntax of the DROP TABLE statement:
The DROP TABLE statement removes a table and its data permanently from the database. In MySQL, you can also remove multiple tables using a single DROP TABLE statement, each table is separated by a comma (,).
The TEMPORARY option allows you to remove temporary tables only. It ensures that you do not accidentally remove non-temporary tables.
The IF EXISTS option conditionally drop a table only if it exists. If you drop a non-existing table with the IF EXISTS option, MySQL generates a NOTE, which can be retrieved using the SHOW WARNINGS statement.
Note that the DROP TABLE statement only drops tables. It doesn’t remove specific user privileges associated with the tables. Therefore, if you create a table with the same name as the dropped one, MySQL will apply the existing privileges to the new table, which may pose a security risk.
The RESTRICT and CASCADE options are reserved for the future versions of MySQL.
To execute the DROP TABLE statement, you must have DROP privileges for the table that you want to remove.
MySQL DROP TABLE examples
Let’s take some examples of using the DROP TABLE statement.
A) Using MySQL DROP TABLE to drop a single table example
First, create a table named insurances for testing purpose:
Second, use the DROP TABLE to delete the insurances table:
A) Using MySQL DROP TABLE to drop multiple tables
First, create two tables named CarAccessories and CarGadgets :
Second, use the DROP TABLE statement to drop the two tables:
C) Using MySQL DROP TABLE to drop a non-existing table
This statement attempts to drop a non-existing table:
MySQL issued the following error:
However, if you use the IF EXISTS option in the DROP TABLE statement:
MySQL issued a warning instead:
To show the warning, you can use the SHOW WARNINGS statement:
MySQL DROP TABLE based on a pattern
Suppose that you have many tables whose names start with test in your database and you want to remove all of them using a single DROP TABLE statement.
Unfortunately, MySQL does not have the DROP TABLE LIKE statement that can remove tables based on pattern matching:
However, there are some workarounds. We will discuss one of them here for your reference.
Suppose you that want to remove all test* tables.
Second, declare two variables that accept database schema and a pattern that you want to the tables to match:
Third, construct a dynamic DROP TABLE statement:
Basically, the query instructs MySQL to go to the information_schema table, which contains information on all tables in all databases, and to concatenate all tables in the database @schema ( classicmodels ) that matches the pattern @pattern ( test% ) with the prefix DROP TABLE . The GROUP_CONCAT function creates a comma-separated list of tables.
Fourth, display the dynamic SQL to verify if it works correctly:
As you can see, the output is what we expected.
Fifth, execute the statement using a prepared statement as shown in the following query:
Putting it all together.
So if you want to drop multiple tables that have a specific pattern in a database, you just use the script above to save time. All you need to do is replacing the pattern and the database schema in @pattern and @schema variables. If you often have to deal with this task, you can develop a stored procedure based on the script and reuse this stored procedure.
In this tutorial, you have learned how to use the MySQL DROP TABLE statement to remove existing tables from a database.
DROP TABLE (Transact-SQL)
Удаляет одно или больше определений таблиц и все данные, индексы, триггеры, ограничения и разрешения для этих таблиц. Любое представление или хранимая процедура, ссылающаяся на удаленную таблицу, должна быть явно удалена с помощью инструкции DROP VIEW или DROP PROCEDURE. Отчет о зависимостях в таблице можно получить из представления sys.dm_sql_referencing_entities.
Синтаксические обозначения в Transact-SQL
Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
database_name
Имя базы данных, в которой создана таблица.
База данных SQL Azure поддерживает формат трехкомпонентного имени имя_базы_данных.[имя_схемы].имя_объекта, если имя_базы_данных — это текущая база данных или tempdb, а имя_объекта начинается с символа #. База данных SQL Azure не поддерживает четырехкомпонентные имена.
IF EXISTS
Применимо к: SQL Server (с SQL Server 2016 (13.x); до текущей версии).
Условное удаление таблицы только в том случае, если она уже существует.
schema_name
Имя схемы, которой принадлежит таблица.
table_name
Имя таблицы, предназначенной для удаления.
Комментарии
Инструкцию DROP TABLE нельзя использовать для удаления таблицы, на которую ссылается ограничение FOREIGN KEY. Сначала следует удалить ссылающееся ограничение FOREIGN KEY или ссылающуюся таблицу. Если и ссылающаяся таблица, и таблица, содержащая первичный ключ, удаляются с помощью одной инструкции DROP TABLE, ссылающаяся таблица должна быть первой в списке.
Несколько таблиц можно удалить из любой базы данных. Если удаляемая таблица ссылается на первичный ключ другой таблицы, которая также удаляется, ссылающаяся таблица с внешним ключом должна стоять в списке перед таблицей, содержащей указанный первичный ключ.
При удалении таблицы относящиеся к ней правила и значения по умолчанию теряют привязку, а любые связанные с таблицей ограничения или триггеры автоматически удаляются. Если таблица будет создана заново, нужно будет заново привязать все правила и значения по умолчанию, заново создать триггеры и добавить необходимые ограничения.
При удалении всех строк в таблице с помощью инструкции DELETE tablename или TRUNCATE TABLE таблица продолжает существовать, пока она не будет удалена.
Большие таблицы и индексы, использующие более 128 экстентов, удаляются в два этапа: логически и физически. На логическом этапе существующие единицы распределения, используемые в таблице, отмечаются для освобождения и остаются заблокированными до фиксации транзакции. В физической фазе страницы IAM, помеченные для освобождения, физически удаляются пакетами.
При удалении таблицы, которая содержит столбец VARBINARY(MAX) с атрибутом FILESTREAM, не будут удалены никакие данные, которые хранятся в файловой системе.
Инструкции DROP TABLE и CREATE TABLE нельзя выполнять для одной таблицы в одном пакете. В противном случае может произойти непредвиденная ошибка.
Разрешения
Примеры
A. Удаление таблицы из текущей базы данных
Б. Удаление таблицы из другой базы данных
Следующий пример удаляет таблицу SalesPerson2 из базы данных AdventureWorks2012. Пример может быть выполнен из любой базы данных на экземпляре сервера.
В. Удаление временной таблицы
Следующий пример создает временную таблицу, проверяет ее наличие, удаляет ее и снова проверяет ее наличие. В этом примере не используется синтаксис IF EXISTS, доступный с версии SQL Server 2016 (13.x);.
Г. Удаление таблицы с помощью IF EXISTS
Применимо к: SQL Server (с SQL Server 2016 (13.x); до текущей версии).
В следующем примере создается таблица с именем T1. Затем вторая инструкция удаляет таблицу. Третья инструкция не выполняет никаких действий, так как таблица уже удалена, однако это не вызывает ошибку.
Drop table if exists mysql что это
DROP TABLE removes one or more tables. You must have the DROP privilege for each table.
Be careful with this statement! For each table, it removes the table definition and all table data. If the table is partitioned, the statement removes the table definition, all its partitions, all data stored in those partitions, and all partition definitions associated with the dropped table.
Dropping a table also drops any triggers for the table.
DROP TABLE causes an implicit commit, except when used with the TEMPORARY keyword. See Section 13.3.3, “Statements That Cause an Implicit Commit”.
When a table is dropped, privileges granted specifically for the table are not automatically dropped. They must be dropped manually. See Section 13.7.1.6, “GRANT Statement”.
If any tables named in the argument list do not exist, DROP TABLE behavior depends on whether the IF EXISTS clause is given:
IF EXISTS can also be useful for dropping tables in unusual circumstances under which there is an entry in the data dictionary but no table managed by the storage engine. (For example, if an abnormal server exit occurs after removal of the table from the storage engine but before removal of the data dictionary entry.)
The TEMPORARY keyword has the following effects:
The statement drops only TEMPORARY tables.
The statement does not cause an implicit commit.
No access rights are checked. A TEMPORARY table is visible only with the session that created it, so no check is necessary.
Including the TEMPORARY keyword is a good way to prevent accidentally dropping non- TEMPORARY tables.
The RESTRICT and CASCADE keywords do nothing. They are permitted to make porting easier from other database systems.