续集你正在使用sql安全更新错误
Posted
技术标签:
【中文标题】续集你正在使用sql安全更新错误【英文标题】:sequelize you are using sql safe update error 【发布时间】:2017-11-15 09:22:33 【问题描述】:我随机收到此错误。我根据用户名从 activeusers 表中删除它有时会给我错误并且有时会顺利运行。 这是我的删除代码
说吧
data=nickname:'asad',id:1
activeusers.destroy(where:username:data.nickname ).then(res=>
);
我已从 sql 工作台关闭 sql 安全更新,但问题仍然存在 我怎样才能永久摆脱这个错误
【问题讨论】:
黑底红字你怎么看出来? 这不是很有趣@P.Salmon 【参考方案1】:这是 mysql 更新的常见问题。这是您的查询:
DELETE FROM ActiveUsers WHERE username = 'mazhar.hayat@ibexglobal.com'
错误源于您没有在WHERE
子句中使用主键列。如果您根本没有 WHERE
子句,您也会看到此错误。 MySQL 有一种模式,它认为这样的 DML 查询是不安全的,因为它的范围很广,并且存在损坏数据的风险。
有一个黑客解决方案可能会奏效。您可以修改查询以提及主键列,如下所示:
DELETE
FROM ActiveUser
WHERE username = 'mazhar.hayat@ibexglobal.com' AND id=id
这可能会使 MySQL 误以为查询是安全的,因为它在 WHERE
子句中提到了主键列 id
。
但我建议您直接在 MySQL 中关闭安全更新模式。编辑您的启动脚本并确保脚本中未提及--safe-updates
和--i-am-a-dummy
。
编辑:
如果您想从destroy
处理这个问题,那么查询选项是唯一的选项:
Post.findAll(
where: ["username = ? AND id = id", data.nickname]
).success()
【讨论】:
我正在使用 sequelize 如何在 sequelize destroy 函数中做到这一点 @Asad 那么您将不得不尝试查询技巧 q.v。我的编辑。请注意,我不建议这样做;配置您的 MySQL 服务器以关闭安全更新模式。这比在你的 javascript 代码中添加 MySQL 配置文件更可取。 我已关闭此设置,但它有随机行为:( @Asad 你是怎么关掉它的?如果您在会话级别将其关闭,那么每个新会话也需要将其关闭。 我把它关掉了我点击工作台edit
菜单然后prefrences
=>然后SQL editor
然后取消标记safe_update
选项@Tim以上是关于续集你正在使用sql安全更新错误的主要内容,如果未能解决你的问题,请参考以下文章