| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 1 | Jack | Nicholson | 2019-06-02 00:00:00 |
UPDATE actor
SET last_name = 'foo'
WHERE last_update > '2019-06-02 00:00:00';
CREATE TEMPORARY TABLE IF NOT EXISTS ids AS (SELECT actor_id FROM actor WHERE last_update > '2019-06-02 00:00:00');
UPDATE actor
SET last_name = 'foo'
WHERE actor_id IN (SELECT actor_id FROM ids);
但我又被1175错误阻塞了。
为什么安全更新模式在这里阻止我?我可以在不禁用安全更新模式的情况下解决它吗?
您可以通过使列成为键列来解决此错误。换句话说,在列上创建一个索引(也称为键)。
mysql> set sql_safe_updates=ON;
mysql> UPDATE actor SET last_name = 'foo' WHERE last_update > '2019-06-02 00:00:00';
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
mysql> alter table actor add key (last_update);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> UPDATE actor SET last_name = 'foo' WHERE last_update > '2019-06-02 00:00:00';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
错误的目的是防止在非索引列上有条件时无意锁定表中的每一行。
锁定的工作方式是锁定查询为测试条件而检查的所有行,而不仅仅是满足条件的所有行。如果您运行一个带有测试未索引查询的条件的查询,它必须检查表中的每一行,这可能比您预期的锁得多。
null 错误代码:1175。您使用的是安全更新模式,并且试图更新一个没有使用键列的WHERE的表。要禁用安全模式,请在Preferences->SQL Editor中切换该选项并重新连接。 为什么安全更新模式停止第二个命令而允许第一个命令?
与其他包管理器(如)相比,我发现当更新与给定项目相关的包时,有一种奇怪的行为。 还根据留档,和选项 根据composer.json将依赖项升级到最新版本,并更新composer.lock文件。 事实上,正确地更新了新的包版本号。但是没有被修改,并且列出了旧的版本过低的包。 为什么会发生这种情况?是我做错了什么,还是这就是应该怎么做的?如果是这样的话,为什么两个文件中的一个是最新的,而另一个不是最新
本文向大家介绍MySQL 错误代码1175:安全更新,包括了MySQL 错误代码1175:安全更新的使用技巧和注意事项,需要的朋友参考一下 示例 尝试更新或删除记录而不包括WHERE使用该KEY列的子句时出现此错误。 要执行删除或更新-输入: 要再次启用安全模式,请输入:
我是java新手,所以请不要后悔java中的对象和东西正在传递引用的值,但下面是我试图传递对象的代码。当我通过传递到函数中更新值时,a的值没有改变。发生了什么请帮助我。。。
我有一个Observable类,它在字符串变化时通知observer。在观察者的update方法中,更新的字符串可以打印到控制台。但是GUI没有相应的更新。为什么?
我一直从mySQL收到这个错误消息 ”错误代码:1175。您正在使用安全更新模式,并且您试图更新一个没有使用KEY列的WHERE的表要禁用安全模式,请在首选项中切换选项- 我使用的查询是: 我确实在ID上有两个表的where子句,这两个表都是主键。 禁用SQL\u安全更新不是一个选项。 编辑:MySQL版本是v5。6.