我一直从mySQL收到这个错误消息
”错误代码:1175。您正在使用安全更新模式,并且您试图更新一个没有使用KEY列的WHERE的表要禁用安全模式,请在首选项中切换选项-
我使用的查询是:
UPDATE table1 a INNER JOIN table2 asa ON a.ID = asa.Table1Id SET a.ReferenceID = asa.ReferenceID WHERE a.ID > 0 AND asa.ID > 0
我确实在ID上有两个表的where子句,这两个表都是主键。
禁用SQL\u安全更新不是一个选项。
编辑:MySQL版本是v5。6.
即使您正在使用KEYS
,我猜KEYS
没有正确使用。MySQL留档说。
如果启用了此变量,则不使用WHERE子句或LIMIT子句中的键的UPDATE和DELETE语句将产生错误。这使得可以捕获未正确使用键的UPDATE和DELETE语句,这些语句可能会更改或删除大量行。
即使在WHERE
条件下,您下面的查询也会影响相同数量的行。我想ID
的所有值都大于0
对吗?如果是这样,那么这就是你出错的原因。
UPDATE table1 a
INNER JOIN table2 asa
ON a.ID = asa.Table1Id
SET a.ReferenceID = asa.ReferenceID
--WHERE a.ID > 0 AND asa.ID > 0
一种方法是按照建议SETSQL_SAFE_UPDATES=0;
(禁用并尝试)。或者尝试改进WHERE
条件。如果是单个表,也可以使用LIMIT
。
MySQL 5.6在执行UPDATE
语句和JOIN
所以,与其
UPDATE table1 a
INNER JOIN table2 asa
ON a.ID = asa.Table1Id
SET a.ReferenceID = asa.ReferenceID
WHERE a.ID > 0 AND asa.ID > 0
您必须根据需要编写尽可能多的查询,例如:
UPDATE table1 a
SET a.ReferenceID = <The corresponding value in table 2>
WHERE a.ID = <The corresponding ID>
这对于类型来说非常烦人,可以使用动态SQL构建更新查询:
SELECT CONCAT('UPDATE table1 a SET a.ReferenceID = ', asa.ReferenceID, ' WHERE a.ID = ', t.ID, ';')
FROM table1 t
INNER JOIN table2 asa
ON t.ID = asa.Table1Id;
例如:
模式(MySQL v5.6)
CREATE TABLE test
(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
foo VARCHAR(255)
);
CREATE TABLE test2
(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
id_test INT NOT NULL,
foo VARCHAR(255),
FOREIGN KEY (id_test) REFERENCES test(id)
);
INSERT INTO test (foo) VALUES ('hello'), ('world');
INSERT INTO test2 (id_test, foo) VALUES (1, 'bar'), (2, 'baz');
问题#1
SELECT CONCAT('UPDATE test t SET t.foo = ''', t2.foo, ''' WHERE t.id = ', t.id, ';') AS 'sql query'
FROM test t
INNER JOIN test2 t2
ON t.id = t2.id_test;
这将产生:
UPDATE test t SET t.foo = 'bar' WHERE t.id = 1;
UPDATE test t SET t.foo = 'baz' WHERE t.id = 2;
现在可以使用输出手动更新不同的行
DB-Fiddle视图
我试图调用一个存储过程,但我得到:错误代码:1175您正在使用安全更新模式,并且您试图更新一个没有使用键列的表 下面是表格: 程序如下: 我是这样称呼它的:
但我又被1175错误阻塞了。 为什么安全更新模式在这里阻止我?我可以在不禁用安全更新模式的情况下解决它吗?
医生总结(查看所有细节,运行): 颤动(频道稳定,v1.12.13 修补程序.8,在微软视窗(版本 10.0.18363.720)和区域设置 en-US) Android工具链 - 针对Android设备开发(Android SDK 版本 29.0.3)。 Android X 许可证状态未知。 请尝试重新安装或更新您的Android SDK 管理器。 请参阅Android Studio下载内容或访
问题内容: 如何批量更新mysql数据?如何定义这样的事情: 具有一些值,例如: 和其他值: 也许用mysql是不可能的?一个PHP脚本? 问题答案: 在这种情况下,最简单的解决方案是使用构造。它的工作速度非常快,并且可以轻松完成工作。 或使用建筑
我尝试删除table1中也出现在table2中的条目。code是table1和table2的主键。我使用以下查询: 但是,我得到了以下错误消息: 错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用列的的表要禁用安全模式,请切换首选项中的选项- 但我的理解是,我已经将与列一起使用。 对此有什么建议吗?