今天很忙,本来想存成草稿有空在编辑的。结果一不小心发布了,所以只能先写完了。
先描述下背景,一个提问的问题
以前我认为,只要是update的where条件可以找到数据的,那么返回的影响行数必然是大于0的。
写了一个SQL: UPDATE tss_view_template SET name='默认风格' where id=1; 结果返回影响行数是0,但是SQL变成这样: UPDATE tss_view_template SET name='默认风格',gmt_create=now() where id=1; 结果返回影响行数是1 难道说这条update的执行之前,会先比对你要更新的字段,如果是一样的,就不算是更新 还是说这个是MySQL的特性
把这个问题简单的归纳下就是,updae语句如果不实际改变数据,那么会不会在底层做操作?
于是在本地做了一下测试
mysql> update test set a=1 where b=2;
Query OK, 0 rows affected
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select row_count();
+-------------+
| row_count() |
+-------------+
| 0 |
+-------------+
1 row in set
mysql> update test set a=2 where b=2;