MYSQL: добавление поля, в случае его отсутствия.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
790

Добрый день коллеги.

Собстно сабж:

Необходимо сделать так, чтобы поле в таблицу БД добавлялась тока если ее там нет еще, а если есть, то не надо.

Знаю, что можно сначала сделать запрос с ЛИМИТ 1, к примеру на строку где прописаны данные админа и посмотреть, есть ли там необходимое поле, и уже от этого плясать. Но может быть есть возможность прописать в сам запрос условие "If not exists"?

Сам запрос:

ALTER TABLE `wp_users` ADD `refer` int AFTER `id`

ЗЫ. Курил мануал от мускула по АЛьтерТейбл, но про IfNotExists ни че не нашел.

ЗЗЫ. В принципе запрос можно оставить и так. Он возвращает ошибку #1060 - Duplicate column name 'MyColumn' и не затирает уже существующие записи в таблице, но все же хочется красоты:)

Подпись))
IL
На сайте с 20.04.2007
Offline
435
#1

Вообще, http://dev.mysql.com/doc/refman/5.6/en/show-columns.html

SHOW COLUMNS FROM table LIKE 'refer';
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#2

Спасибо, это лучше чем выборка через ЛИМИТ 1:)

Но я думал, что сделать это одним запросом. Как-то типа

ALTER TABLE `wp_users` ADD `refer` int IF NOT EXISTS AFTER `id`

Добавлено позже: сделал 2 запроса. Если SHOW COLUMNS возвращает чё-то, то мимо проходим, если нету такого поля - создаем. СПС!

N
На сайте с 06.05.2007
Offline
419
#3

так зачем вы этот код ошибки выводите пользователю ?

выполняете alter table, проверяете код ошибки и игнорируете ошибку в случае если этот код соответствует ситуации с уже созданным полем. любые другие ошибки - проблема, требующая реакции пользователя.

Кнопка вызова админа ()
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#4

Да ошибки не отдаются юзеру. Ето плагин для ВП, я ошибку глянул в ПХПМайАдмин, когда СКуЭль запрос сделал такой. А так все норм. Но сделал на всякий случай проверку через SHOW COLUMNS

N
На сайте с 06.05.2007
Offline
419
#5

Милованов Ю.С, да можно вообще ничего не делать. но раз уж вас так заботит "всякий случай", нужно делать именно проверку кода, потому что только этот способ позволяет избежать ситуации, когда между SHOW COLUMNS и ALTER TABLE сработает еще один параллельно запущенный инсталлятор.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий