Есть ли способ, с помощью которого можно запретить или избежать обновления ВСЕХ строк таблицы Mysql?
Задний план:
У меня есть таблица «Заказы» с двумя столбцами «OrderID» (тип VARCHAR) и «VendorID» (тип Integer). Если я выполню приведенный ниже запрос к этой таблице, он просто сбрасывает VendorID во всех строках:
SET `VendorID` = 0 WHERE `OrderID` = 0
OrderID не должен быть 0, но из-за какой-то ошибки в системе он избежал всех проверок и создал хаос. Если бы OrderID был целочисленного типа, этот запрос ничего бы не сделал. Но поскольку в OrderID есть алфавиты, его нельзя установить как целочисленный тип.
Можно ли настроить Mysql таким образом, чтобы он отклонял обновления для всех строк? Будет ли результат изменения этого запроса, если базовая база данных не Mysql?
Моя среда:
nginx / 1.4.6 Codeigniter (2.x) / Mysql (5.5) / тип таблицы InnoDB
Пожалуйста, подскажите, как можно избежать этой проблемы в будущем, спасибо.
Ваш вопрос о DBA Stack Exchange был отмечен как дубликат вопроса о кастинге ... Я сомневаюсь, что кастинг ваших данных решил бы проблему, поэтому я использую этот вопрос для ответа.
Order_id звучит так, как будто это должен быть первичный ключ (как уникальный, так и не нулевой) ...
alter table orders
add primary key (order_id);
Если order_id не является хорошим первичным ключом (т.е. он допускает значение NULL), то вместо этого сделайте его уникальным ключом ...
alter table orders
add constraint orders_orderid_uk
unique (order_id);