例如,假设您有一个 CD 数据库,您希望将所有类型为“流行”的 CD 的 CD 价格提高 10%。然而类型 Genre 是一个 SET。它可以是多种流派,例如 RnB 和摇滚。
我的代码如下:
UPDATE CD
set price = price * 1.1
WHERE genre = 'Pop';
但是,我的代码仅更新流派仅流行的行。如果流派是“摇滚、流行、RnB”,则不会更新。我究竟做错了什么?
您需要使用LIKE
(文档):
... WHERE genre LIKE '%Pop%'
如果您的流派是“摇滚、流行、RnB”,这将匹配。
您应该知道您使用的是非规范化结构。更好的设计是有一个流派参考表:
CD_Genre(CD,流派)
使用like关键字
UPDATE CD set price = price * 1.1 WHERE genre like '%Pop%';
在查询中访问 SET 值的最佳方法是 FIND_IN_SET:
UPDATE CD
set price = price * 1.1
where FIND_IN_SET('Pop', `genre`)
关于 FIND_IN_SET 的更多信息可以在这里找到:http: //dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set