MySQL隱式轉換,導致的誤操作更新資料一則

2021-10-03 17:17:54 字數 1161 閱讀 2562

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 ...