update tb set content=
'***'
where tcode=
1
因為該錶的 tcode 定義如下,並且是唯一索引:
`code`
varchar
(128
)not
null
comment
'短碼'
沒有想太多,直接安排刷庫了,一看刷庫結果,影響行數4097行,頭一暈,
趕緊用查詢語句看一下:
select tcode from tb where tcode=
1
果然記錄出來一堆:
001s1ehd
001w0eu6
01a9duv5
01add24s
01as9s7r
11a00154e
1a095v1s
稍微一想,該字段是varchar型別,但是我的條件比對用了數值型,
mysql自動切換為全表掃瞄(不會使用索引),並逐一把tcode隱式轉換為int型別,跟1進行比對,然後執行。
而mysql的隱式轉換,是把字串類裡,類似數字的部分轉換為數字,比如:01a9duv5就是01(後面的9和5無效),所以出來了一堆符合條件的記錄。
怎麼辦?恢復啊,找到昨天晚上的備份,先恢復到臨時庫,再用上述tcode進行查詢:
select concat(
'update tb set content='
'', content,
''' where `tcode`=''',
`tcode`,''
';') sq from tcode where
`tcode`in(
'001s1ehd'
,'001w0eu6'..
...)
結果如下:
update tb set content='aaa' where `tcode`='001s1ehd';
update tb set content='bbb' where `tcode`='001w0eu6';
再執行這個語句得到的所有update語句,恢復完成。 mysql 隱式轉換 mysql中的隱式轉換
在mysql查詢中,當查詢條件左右兩側型別不匹配的時候會發生隱式轉換,可能導致查詢無法使用索引。下面分析兩種隱式轉換的情況 看表結構 phone為 int型別,name為 varchar 兩種情況都可以用到索引,這次等號右側是 2 注意帶單引號喲,左側的索引欄位是int型別,因此也會發生隱式轉換,但...
mysql 中的隱式轉換導致sql變慢
線上跑了乙個慢sql,檢視表結構,表裡面有order no的唯一索引 此處注意mysql查詢隱式轉換的導致問題,當查詢條件左右兩側型別不匹配是,就會發生隱式轉換,導致索引無法起作用 庫里有一張表,有欄位order no varchar final amount decinal 分別有唯一索引orde...
mysql隱式轉換
定義 當操作符與不同型別的運算元一起使用時,會發生型別轉換以使運算元相容。則會發生轉換隱式 舉乙個常見例子 1 我們先建立乙個表,有關手機號查詢 create table user id int 11 not null primary keyauto increment phone varchar ...