Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有任何连接谓词的MySQL连接_Mysql_Sql - Fatal编程技术网

没有任何连接谓词的MySQL连接

没有任何连接谓词的MySQL连接,mysql,sql,Mysql,Sql,我有两张桌子: `table_1` +----+----------+ | id | value | +----+----------+ | 1 | value_1 | | 2 | value_2 | | 10 | value_10 | | 20 | value_20 | | 50 | value_50 | +----+----------+ 现在,我运行了以下查询: UPDATE table_1, table_2 SET table_1.value = 'updated'

我有两张桌子:

`table_1`

+----+----------+
| id | value    |
+----+----------+
|  1 | value_1  |
|  2 | value_2  |
| 10 | value_10 |
| 20 | value_20 |
| 50 | value_50 |
+----+----------+

现在,我运行了以下查询:

UPDATE table_1, table_2 SET table_1.value = 'updated' WHERE table_1.id = '20';
我得到了以下结果:

Query OK, 1 row affected (0.45 sec)
Rows matched: 1  Changed: 1  Warnings: 0
现在,如果我运行此查询:

SELECT * FROM table_1, table_2 WHERE table_1.id = '20';
我得到5行:

5 rows in set (0.00 sec)
这是非常正确的

为什么
更新
查询的行为方式与
选择
不相似? 是否有任何通用方法将上述
UPDATE
查询转换为
SELECT
查询,以便我们可以在不实际执行
UPDATE
查询的情况下获得受影响的行数


在上述情况下,我们在两个查询中都应该得到1。

受影响的行数是正确的,选择
返回的行数也是正确的

这一点在以下章节中得到了非常清楚的解释:

对于多表语法,UPDATE将更新名为 在表_中,满足条件的参考。每个匹配行都是 更新一次,即使它多次匹配条件

select
多次从
table1
返回同一行。无论如何,此行仅通过
更新更新一次。它得到的值(如果有选择)是任意的。你不应该依赖于某个特定的行为。而且,更新不是累积的。

当您添加以下内容时:

,table2
你已经加入了,这就是为什么你有这么多专栏。。。 但如果您希望同时编辑两个表行,请使用以下命令:

UPDATE table_1, table_2 SET table_1.value = 'updated', table_2.value = 'updated' WHERE table_1.id = '20';

您只更新表1 fiedl而不是表2,并且您检索两个表数据,所以它们是不同的
UPDATE table_1, table_2 SET table_1.value = 'updated', table_2.value = 'updated' WHERE table_1.id = '20';