下午剛剛在乙個jira變更中的遇到問題,非常容易產生誤使用,產生比較大的危害。大家看下。非常簡單的一條sql:
mysql> update order_original set audit_status=3 and is_queue=1 where id=16682331;
query ok, 0 rows affected (0.00 sec)
rows matched: 1 changed: 0 warnings: 0
很快就執行完了。但是,大家留意到沒? changed: 0 ,即雖然rows matched: 1,確實有 id=16682331這一行,但是沒有更新成功。這時,很多人肯定想到,這裡肯定就是已經被更新過了啊。我們來看下:
mysql> select audit_status,is_queue from order_original where id=16682331;
+--------------+----------+
| audit_status | is_queue |
+--------------+----------+
| 1 | 1 |
+--------------+----------+
1 row in set (0.00 sec)
是不是很奇怪,並不是我們想要的結果。ok,我們把sql改變一下寫法:
mysql> update order_original set audit_status=3, is_queue=1 where id=16682331;
query ok, 1 row affected (0.00 sec)
rows matched: 1 changed: 1 warnings: 0
注意,是不是已經是changed: 1 ?我們例項再查一下:
mysql> select audit_status,is_queue from order_original where id=16682331;
+--------------+----------+
| audit_status | is_queue |
+--------------+----------+
| 3 | 1 |
+--------------+----------+
1 row in set (0.00 sec)
確實資料update成功了。到這裡大家應該明白了吧。如果還不明白,我們再做乙個更明顯的實驗,幫忙看清本質的原因:
mysql> create table test(a int,b int,c int);
query ok, 0 rows affected (0.01 sec)
mysql> insert into test values(1,2,3);
query ok, 1 row affected (0.00 sec)
mysql> update test set b=99 and c=3 where a=1;
query ok, 1 row affected (0.00 sec)
rows matched: 1 changed: 1 warnings: 0
mysql> select * from test;
+------+------+------+
| a | b | c |
+------+------+------+
| 1 | 1 | 3 |
+------+------+------+
1 row in set (0.00 sec)
mysql> update test set b=99 and c=5 where a=1;
query ok, 1 row affected (0.00 sec)
rows matched: 1 changed: 1 warnings: 0
mysql> select * from test;
+------+------+------+
| a | b | c |
+------+------+------+
| 1 | 0 | 3 |
+------+------+------+
1 row in set (0.01 sec)
即在update中,set 列=值,這個等號後面把and看成乙個位運算,當後面的結果存在或正確時(set b=99 and c=3),那就是set 列=1,錯誤或不存在時(set b=99 and c=5)就是0。
因此必須避免在update的列更新中使用and。切記。
電腦使用中的幾個誤區
1.正確開關機 養成正常的開關機習慣是很有必要的,在 xp作業系統下 按一下電腦開關鍵就自動進行開機 一直等到完全進入桌面系統前不要進行任何的操作 除非有問題進不了系統 正常情況下都是可以進入桌面的 如果想關機 有些朋友不喜歡按正常順序 點開始 關閉計算機,關閉 那也可以通過再按電腦主機上的開關鍵一...
sizeof使用中的幾個誤區總結
例如 char ss2 0123456789 sizeof ss2 結果為11,而不是10 字元陣列ss2中包含隱含的 0 也算乙個字元,佔乙個位元組,所以ss2的總的大小為11位元組。結構體的sizeof涉及到位元組對齊問題。為什麼需要位元組對齊?計算機組成原理教導我們這樣有助於加快計算機的取數速...
C Vector的使用誤區
初始化vector並傳引用到dll中,dll中為該引用新增節點,vector記憶體釋放時會報堆疊錯誤,原因?這個問題其實挺好避免的,說白了就是不要乙個模組new,另乙個模組delete,不要認為你的vector的節點資料在棧上,vector的本質就是乙個變長陣列,怎麼會在棧上呢,資料肯定是在堆上的,...