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

я пробовал

SET @branch := 'BRANCH_A';

ALTER TABLE item
ADD COLUMN branch VARCHAR(15) NOT NULL DEFAULT @branch FIRST;

Это возвращает ошибку:

SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@branch FIRST' at line 2

Это работает нормально

ALTER TABLE item
ADD COLUMN branch VARCHAR(15) NOT NULL DEFAULT 'BRANCH_A' FIRST;

Где я ошибся?

Вы не ошиблись. Вы не можете использовать переменную по умолчанию для столбца, если только вы не используете динамический sql. Есть ли какая-то причина, по которой вы хотите сделать что-то подобное?

P.Salmon 12.06.2019 13:19

@P.Salmon Я делаю фрагменты, потому что нам нужно экспортировать, изменять и повторно загружать таблицы, когда что-то идет не так (это происходит довольно часто из-за плохого интернет-соединения в нашем клиентском магазине). Будет много строк, а не только ветка ADD COLUMN, поэтому я думаю, что использование переменной вверху более аккуратно, чем замена значения посередине. Это просто временное быстрое решение, пока мы работаем над программой, которая будет делать это автоматически.

Christhofer Natalius 12.06.2019 13:25

не уверен, что происходит с плохим подключением к Интернету, но все же, может быть, вы можете уточнить, объяснив случай пользователя? это работающее (веб) приложение, которое может хранить информацию?

Raymond Nijland 12.06.2019 13:31

если это веб-приложение, вы можете сделать веб-приложение автономным приложением с кешем html 5 и использовать WebSQL или IndexedDB для локального хранения информации при отключении интернет-соединения. HTML 5 имеет API для обнаружения этого, когда Интернет снова в сети передавать информацию из локальной базы данных на сервер. Но вне курса лучшим вариантом было бы получить лучший Интернет, если это возможно там.

Raymond Nijland 12.06.2019 13:33

@RaymondNijland У клиента есть несколько филиалов, на которых запущена локальная настольная программа, а затем программа загружает запас товаров на онлайн-сервер, чтобы другие филиалы могли видеть запасы товаров в каждом филиале. Но если связь плохая, конечно, товарный запас устареет. И когда очередь становится слишком большой, нам нужно вручную загрузить ее на сервер.

Christhofer Natalius 13.06.2019 04:14

Старая программа загружает по элементам, что слишком медленно. Я работаю над тем, чтобы вместо этого загружать пакет элементов, но я не знаю, как сделать почтовый запрос, отправляющий массив объектов в С#, я задал вопрос об этом здесь, но до сих пор нет ответа. stackoverflow.com/questions/56342631

Christhofer Natalius 13.06.2019 04:14
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
6
560
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно использовать динамический sql, чтобы использовать переменную в вашем запросе:

SET @branch := 'BRANCH_A';
SET @query := CONCAT('ALTER TABLE item ADD COLUMN branch VARCHAR(15) NOT NULL DEFAULT "', @branch, '" FIRST');
PREPARE dynamic_statement FROM @query;
EXECUTE dynamic_statement;

Другие вопросы по теме