Зачем в MySQL при удалении поля в таблице используют COLUMN?
У меня есть таблица в phpMyAdmin, когда я хочу удалить из нее столбец, я использую:
ALTER TABLE pepole DROP bio;
Но когда я смотрю примеры из интернета, вижу что люди используют следущее:
ALTER TABLE pepole DROP COLUMN bio;
Я понимаю что COLUMN - это столбец, но обязательно ли его использовать, если у меня и так все работает?
Ответы (2 шт):
ALTER TABLE pepole DROP bio;
это сокращенная форма запроса, они оба выполняют одинаковое действие и можно пользовать и первым запросом и вторым
ALTER TABLE DROP без указания конкретного объекта может удалять как поле, так и индекс. При отсутствии опционального ключевого слова и наличии объектов обоих типов с таким именем - фактически удаляется поле, а не индекс, но это не документировано (или я не нашёл).
Но это надо знать и помнить. Использование опционального ключевого слова полностью снимает неоднозначность того, что вы собственно удаляете.
CREATE TABLE test (
id INT,
column1 INT,
column2 INT,
column3 INT,
KEY column1 (column1),
KEY column2 (column2),
KEY column3 (column3)
);
SHOW CREATE TABLE test;
Table | Create Table |
---|---|
test | CREATE TABLE `test` ( `id` int DEFAULT NULL, `column1` int DEFAULT NULL, `column2` int DEFAULT NULL, `column3` int DEFAULT NULL, KEY `column1` (`column1`), KEY `column2` (`column2`), KEY `column3` (`column3`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
-- Явно удаляем COLUMN, удаляется и соответствующий индекс
ALTER TABLE test DROP COLUMN column1;
-- Явно удаляем индекс, поле не удаляется
ALTER TABLE test DROP INDEX column2;
-- Не указываем, что удалять, удаляются и поле, и индекс
ALTER TABLE test DROP column3;
SHOW CREATE TABLE test;
Table | Create Table |
---|---|
test | CREATE TABLE `test` ( `id` int DEFAULT NULL, `column2` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
Относитесь к использованию опциональных ключевых слов как к неявному документированию.