FAQ系列|寫新資料時某列值總是被自動修改
0、導讀
往表裡寫入新資料時,卻一直報告主鍵衝突,某列值一直被重置為一個固定值,疑似被黑,啥情況?
1、問題描述
某朋友的線上資料庫,懷疑被侵入了。具體表象是:INSERT的時候,某列值總被自動改成一個固定值。
他們先自查了 TRIGGER 和 EVENT,都是空的,確定不是因為這兩種原因引起,實在想不出是哪裡被動了手腳。
問題的現象:
MariaDB [information_schema]> use bbs9;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [bbs9]> INSERT INTO cdb_mythreads_latest (uid,username,tid,fid,subject,special,dateline) VALUES (`1239009`,`yayv`,`13482713`,`815`,`bbs5 …………….`,`0`,`1459569279`);
ERROR 1062 (23000): Duplicate entry `1239009-8388607` for key `PRIMARY`
可以看到,tid列的值被從 13482713(原始值) 自動替換成了 8388607(篡改值)。
更讓人奇怪的是,這條SQL在mysql client端手動執行手,也會報告同樣的錯誤。究竟是什麼黑客這麼牛逼呢,百思不得其解~~~
2、原因分析
單從現象來看,好像還真是被黑了的意思。
but,但是,可是,你如果足夠細心,就會發現端倪。
為什麼這麼說呢,因為 8388607 這個數值是不是看起來挺眼熟的?嗯,沒錯,你才對了,這個值是 MEDIUMINT 型別的最大值,而 MEDIUMINT UNSIGNED 的最大值是 16777215。
當然了,你再認真看一眼表的名字是什麼:cdb_mythreads_latest,我又要呵呵了,你懂得的。
3、其他建議
既然原因已經清楚了,那麼解決起來也就簡單了,只需要把tid列型別改成INT UNSIGNED,甚至BIGINT UNSIGNED都行。
MEDIUMINT和INT兩種型別,也只是差了1個位元組,何必呢。與其在這個地方節約1個位元組,還不如在別的CHAR/VARCHAR/TEXT列調整下,其優化效果要好的多得多。
4、相關案例
文章轉自老葉茶館公眾號,原文連結:https://mp.weixin.qq.com/s/vcg0fGJf4mKP6e2na2lMvw
相關文章
- FAQ系列|列型別被自動修改導致複製失敗型別
- 抓取資料時總是被網站阻止怎麼辦?網站
- 資料視窗橫向滾動時用PB鎖定某列
- oracle 自動列值增加Oracle
- golang const 宣告常量量時候,只寫名字,就會自動有值?——>[批量賦值][列舉]Golang賦值
- 「Excel技巧」Excel中根據某列的值去彙總另外一列的值Excel
- jBoss下資料庫表名大小寫被自動更改的問題資料庫
- layui資料表格初始化時按某列進行排序UI排序
- jq動態修改select 的option值,使option值自動選中
- Excel中實現當手動輸入A列和B列的值時,C列自動計算A列和B列的和Excel
- 華納雲:雲資料庫中自動讀寫分離是什麼?資料庫
- “大資料”與“小資料”——寫在新書釋出時大資料新書
- linux查詢某段時間修改的檔案的總大小Linux
- mysql 修改資料庫的列MySql資料庫
- sqlserver 修改列的預設值SQLServer
- 如何用exp 匯出 某個表的某幾列資料
- excel按照姓名自動匹配資料函式 怎麼根據姓名自動填寫資料Excel函式
- Oracle 對某列的部分資料建立索引Oracle索引
- 兩表中某列的資料差異
- [PHPStorm] 格式化程式碼時自動對齊陣列的鍵值對PHPORM陣列
- sqlalchemy實現時間列自動更新SQL
- 修改Ehcache快取中取到的值,快取中的值也被修改了快取
- mysqdump 忽略某個資料庫的寫法資料庫
- 10g新特性:rman恢復時候資料檔案的自動建立
- EntityFramework系列:SQLite.CodeFirst自動生成資料庫FrameworkSQLite資料庫
- 軟體是實現資料自動流動的核心
- [Oracle]Oracle資料庫資料被修改或者刪除恢復資料Oracle資料庫
- 資料結構FAQ (轉)資料結構
- 解決webstorm總是卡得自動退出WebORM
- final屬性值能被反射修改嗎?反射
- 如何總是在新視窗中開啟資料夾?
- mybatis-plus 透過 updateById 更新部分欄位資料時出現所有資料被更新(被設為預設值)MyBatis
- 查詢某個表最後修改時間
- jquery [datatable]排序時指定某列不可排序jQuery排序
- 一種資料被誤修改後的找回方法
- 寫獨立技術部落格掙被動收入-掙錢系列
- 資料是自動化與智慧化的基礎
- 人機協作是如何自動化分類資料