Dier_Sergio_Great
@Dier_Sergio_Great
Увлеченный человек

Как в MySQL запросе добавить колонку в таблицу с проверкой наличия этой колонки?

Уважаемые Гуру и специалисты дайте совет пожалуйста.
Имеется узкие рамки создания пакета.
-Все запросы нужно упаковывать в файлы с расширением SQL
-В файле SQL хранится множество запросов
-В одном из запросов нужно добавить колонку в таблицу, но надо проверить отсутсвие этой колонки.
ALTER TABLE jshopping_orders ADD bonus varchar(24) NOT NULL DEFAULT '';
  • Вопрос задан
  • 470 просмотров
Решения вопроса 3
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
MariaDB позвщляет синтакс:
ALTER TABLE jshopping_orders ADD COLUMN IF NOT EXISTS bonus varchar(24) NOT NULL DEFAULT '';


View MariaDB fiddle
Ответ написан
kotomyava
@kotomyava
Системный администратор
Можно проверить в INFORMATION_SCHEMA наличие столбца:
IF NOT EXISTS( SELECT NULL
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'jshopping_orders'
       AND table_schema = (SELECT DATABASE())
       AND column_name = 'bonus')  
THEN
  ALTER TABLE `jshopping_orders` ADD bonus varchar(24) NOT NULL DEFAULT '';
END IF;


!Написано без проверки могут быть опечатки, работоспособность "как есть" не гарантируется. =)
Ответ написан
Dier_Sergio_Great
@Dier_Sergio_Great Автор вопроса
Увлеченный человек
Нашел ответ!
Поддерживает версию MySQL 5.7 !
Дождешься тут Гуру и специалистов.
При помощи //duckduckgo.com нашёл ответ.
Яндекс вообще не чего не ищет. Да и браузер свой сделать по нормальному как Chrome ни как не могут уже второй год.
Это Все один запрос такой длинный, но он работает:
DELIMITER $$
DROP PROCEDURE IF EXISTS addColumnToTable $$
CREATE PROCEDURE addColumnToTable()
BEGIN
IF 
NOT EXISTS( (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE()
        AND COLUMN_NAME='column_name' AND TABLE_NAME='table_name') ) 
THEN
    ALTER TABLE table_name ADD column_name varchar(24) NOT NULL DEFAULT '';
END IF;
END $$
CALL addColumnToTable() $$
DELIMITER ;


SET @s = (SELECT IF(
    (SELECT COUNT(*)
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE table_name = 'tbl'
        AND table_schema = DATABASE()
        AND column_name = 'bonus'
    ) > 0,
    "SELECT 1",
    "ALTER TABLE tbl ADD bonus VARCHAR(100)"
));

PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы