我冒昧地假设这里的真正问题是确保两个表同时更新,并且两个更新都不会失败。在那种情况下,我会使用交易。
复合查询通常只用“select”语句引用。“事务”提供了对多个更新的可靠处理,因为如果更新的一部分失败,它们支持回滚。
注意:事务仅适用于 InnoDB 表。
您可以将表更改为 InnoDB
mysql> alter table `addr` engine = InnoDB
mysql> alter table `loan` engine = InnoDB
前...
mysql> select * from loan ;
+--------+---------------------+
| loanid | DDBTUPD |
+--------+---------------------+
| 1 | 0000-00-00 00:00:00 |
| 2 | 0000-00-00 00:00:00 |
| 3 | 0000-00-00 00:00:00 |
+--------+---------------------+
交易...
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE addr SET addr.STUUPD= NULL Where addr.STUUPD='0000-00-00 00:00:00' ;
Query OK, 4 rows affected (0.01 sec)
mysql> UPDATE loan SET loan.DDBTUPD= NULL Where loan.DDBTUPD='0000-00-00 00:00:00' ;
Query OK, 3 rows affected (0.00 sec)
此时,您将能够看到更新的结果,但其他用户将看不到
mysql> select * from loan ;
+--------+---------+
| loanid | DDBTUPD |
+--------+---------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
+--------+---------+
您将需要提交交易
mysql> COMMIT ;
Query OK, 0 rows affected (0.01 sec)
我怀疑如果其中一个表的日期不等于“0000-00-00 00:00:00”而另一个表有,那么下面的彼得姆解决方案会遇到问题。petterm 的查询可能不会像预期的那样将所有内容都归零。我很高兴被证明是错误的。