инструкция mysql для добавления нескольких столбцов, независимо от того, существуют они или нет

#mysql #phpmyadmin #alter

#mysql #phpmyadmin #изменить

Вопрос:

Я пытаюсь написать инструкцию update mysql для программы. В настоящее время это то, что у меня есть для statment, но я не знаю, как добавить несколько столбцов для обновления.

В настоящее время этот код добавляет столбец независимо от того, есть он там или нет.


 /*delimiter '//'
CREATE PROCEDURE addcol() BEGIN
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS
WHERE COLUMN_NAME=`top_status` AND TABLE_NAME='categories'
)
THEN
ALTER TABLE `categories`
ADD COLUMN `top_status` tinyint(1) NOT NULL default '1';
END IF;
END;
delimiter ';'
CALL addcol();
DROP PROCEDURE addcol;*/
  

Может ли кто-нибудь предоставить мне правильное утверждение, чтобы получить что-то подобное work…ie . ГДЕ COLUMN_NAME = column1, column2 и т.д..

Я перепробовал все виды вариантов, и все они возвращают ошибку в phpmyadmin, кроме приведенной выше.

Ответ №1:

Используйте инструкцию ALTER TABLE для добавления нескольких столбцов в таблицу:

 ALTER TABLE TableName
ADD (column1 col_definition,
column2 col_definition,
column3 col_definition,
....      ......
....      ......
columnN col_definition);
  

Ответ №2:

Конечно, вы хотите индивидуально проверить наличие новых столбцов и добавить каждый из них по отдельности, если он еще не существует?

Если вы хотите INFORMATION_SCHEMA , чтобы запрос проверял наличие любого из столбцов column1, column2 и т. Д. вы можете использовать IN инструкцию. Если вы хотите проверить, все ли они существуют, вы можете использовать IN и вместо проверки, является ли результирующий набор пустым, выберите a COUNT(*) и проверьте, является ли возвращаемое количество ожидаемым числом (количество задействованных столбцов).

Комментарии:

1. является ли мой метод даже правильным способом сделать это? То, что я пытаюсь сделать, это настроить инструкцию, которую я могу использовать для многих разных баз данных, которые устарели в разных версиях с разными данными / столбцами. В некоторых БД есть столбцы, в некоторых нет, в некоторых есть все последние столбцы. Но я просто хочу, чтобы один оператор выполнялся для каждой БД, чтобы в основном сделать все БД одинаковой и последней сборки. Итак, это лучший метод или есть лучший способ? Кроме того, ниже post, как вы собираетесь добавлять свои утверждения?

2. /* разделитель ‘//’ СОЗДАТЬ ПРОЦЕДУРУ addcol() НАЧАТЬ, ЕСЛИ НЕ СУЩЕСТВУЕТ( ВЫБЕРИТЕ * ИЗ information_schema . СТОЛБЦЫ, ГДЕ COLUMN_NAME В ( top_status, 'categories') AND TABLE_NAME='categories' ) THEN ALTER TABLE категории` ДОБАВИТЬ СТОЛБЕЦ ( top_status tinyint(1) NOT NULL по умолчанию ‘1’, categories tinyint(1) NOT NULL по умолчанию ‘1’); END IF; END; разделитель ‘;’ ВЫЗОВ addcol(); УДАЛЕНИЕ ПРОЦЕДУРЫ addcol;*/ Кстати, это не работает.

3. Это неправильный синтаксис для ALTER TABLE ; правильный синтаксис ALTER TABLE categories ADD COLUMN top_status tinyint(1) NOT NULL default '1', ADD COLUMN categories tinyint(1) NOT NULL default '1'

4. IF Инструкция в вашем комментарии проверяет, содержит ли таблица хотя бы один из столбцов top_status и categories . Если у него есть один, но нет другого, то IF оператор выполняется, и вы столкнетесь с ошибкой при попытке добавить столбец, который уже присутствует. Итак, если в таблице могут быть некоторые столбцы, но нет других, вам нужно проверить наличие каждого столбца по отдельности и разобраться с каждым, которого там нет. Это означает несколько IF инструкций.

5. хорошо, это то, что у меня есть сейчас, и оно все еще не обновляет оба столбца. Ошибок нет, но и добавления тоже нет. /* разделитель ‘//’ СОЗДАТЬ ПРОЦЕДУРУ addcol() НАЧАТЬ, ЕСЛИ НЕ СУЩЕСТВУЕТ(ВЫБЕРИТЕ COUNT(*) ИЗ information_schema . СТОЛБЦЫ, ГДЕ COLUMN_NAME В ( categories_status, top_status’) И TABLE_NAME=’categories’) ЗАТЕМ ИЗМЕНИТЕ ТАБЛИЦУ categories , ДОБАВЬТЕ СТОЛБЕЦ categories_status int(1) без знака NOT NULL по умолчанию ‘1’, top_status tinyint(1) NOT NULL по умолчанию ‘1’; END IF; END; разделитель ‘;’ ВЫЗОВ addcol(); УДАЛЕНИЕ ПРОЦЕДУРЫ addcol;*/