有没有办法可以拒绝或避免对 Mysql 表的所有行进行更新?
背景:
我有一张名为“Orders”的表,其中有两列:‘OrderID’(类型 VARCHAR)和‘VendorID’(类型 Integer)。如果我在此表上运行以下查询,它只会重置所有行中的 VendorID:
SET `VendorID` = 0 WHERE `OrderID` = 0
OrderID 不应该为 0,但由于系统中存在一些错误,它逃过了所有检查并造成了严重破坏。如果 OrderID 是 Integer 类型,则此查询不会执行任何操作。但由于 OrderID 有字母,因此无法将其设置为 Integer 类型。
是否可以将 Mysql 配置为拒绝对所有行进行更新?如果底层数据库不是 Mysql,此查询的结果会改变吗?
我的环境:
nginx/1.4.6 Codeigniter (2.x) / Mysql (5.5) / InnoDB 表类型
请建议如何在将来避免此问题,谢谢。
答案1
您在 DBA Stack Exchange 上的问题被标记为转换问题的重复...我怀疑转换您的数据是否能解决问题,所以我使用这个问题来回答。
Order_id 听起来应该是一个主键(既唯一又不为空)......
alter table orders
add primary key (order_id);
如果 order_id 不是一个好的主键(即,它是可空的),那么就将其设为唯一键......
alter table orders
add constraint orders_orderid_uk
unique (order_id);