#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;*/