1. 程式人生 > >MySQL 進行 Replace 操作時造成資料丟失——那些坑你踩了嗎?

MySQL 進行 Replace 操作時造成資料丟失——那些坑你踩了嗎?

 原文章地址:http://mp.weixin.qq.com/s/nCryxMQK00ZjjuTsfYvk3w

一、問題說明

公司開發人員在更新資料時使用了 replace into 語句,由於使用不當導致了資料的大量丟失,到底是如何導致的資料丟失?現分析如下。

二、問題分析

a. REPLACE 原理

REPLACE INTO 原理的官方解釋為:

REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted.

如果新插入行的主鍵或唯一鍵在表中已經存在,則會刪除原有記錄並插入新行;如果在表中不存在,則直接插入

地址:https://dev.mysql.com/doc/refman/5.6/en/replace.html

b. 問題現象

丟失資料的表結構如下:

CREATETABLE`active_items`(

`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主鍵',

`ad_id`char(32)NOTNULLDEFAULT''COMMENT'XXX',

`ap_id`tinyint(4)NOTNULLDEFAULT

'1'COMMENT'XXX',

`price`bigint(20)NOTNULLDEFAULT'0'COMMENT'xxx',

`rate`int(11)NOTNULLDEFAULT'0'COMMENT'XXX',

`cc_price`bigint(20)NOTNULLDEFAULT'0'COMMENT'XXX',

`sale_count`int(11)NOTNULLDEFAULT'0'COMMENT'XXX',

`prom_count`int(11)NOTNULLDEFAULT'0'COMMENT'XXX',

`c1`int(11)NOTNULLDEFAULT'0'COMMENT

'XXX',

`status`tinyint(4)NOTNULLDEFAULT'0'COMMENT'XXX',

`order_num`int(11)NOTNULLDEFAULT'0'COMMENT'XXX',

`score`int(11)NOTNULLDEFAULT'0'COMMENT'XXX',

`audit_time`int(11)NOTNULLDEFAULT'0'COMMENT'XXX',

`prom_modify_time`int(11)NOTNULLDEFAULT'0'COMMENT'XXX',

`sales_modify_time`int(11)NOTNULLDEFAULT'0'COMMENT'XXX',

`create_time`int(11)NOTNULLDEFAULT'0'COMMENT'建立時間',

`modify_time`int(11)

相關推薦

MySQL 進行 Replace 操作造成資料丟失——那些

 原文章地址:http://mp.weixin.qq.com/s/nCryxMQK00ZjjuTsfYvk3w 一、問題說明 公司開發人員在更新資料時使用了 replace into 語句,由於使用不當導致了資料的大量丟失,到底是如何導致的資料丟失?現分析

關於MYSQL進行insert操作,存在則更新不存在則插入的解決辦法

在專案開發中經常會遇到資料頻發插入操作且需要進行判斷,這樣會業務層多一次判斷的操作,多請求一次資料庫,造成效能問題,所以採用以下辦法解決了這個令人藍瘦的問題。。。 這裡是一個使用者運動記錄表,記錄使用者每天的運動時間,走的路程,消耗的能量和走的步數,前臺是定時一分鐘向後臺傳送

關於java中需要對路徑進行分割操作出現的異常

在工作中操作分割路徑時出現的問題 示例:String path = "C:\\Users\\Administrator.SC-201606041031\\Desktop\\test.txt"; 需要對該path進行分割操作則需要 String[] matchPaths = path.split

mybatis進行批量操作的需要設定allowMultiQueries=true

    前言:在專案開發的時遇到同時執行多條刪除或者更新語句,將語句放到mysql命令列來執行是沒有問題的,可到了mybatis就報錯,為啥呢? 解決: 請大家先看一段程式碼: <update id="updateId"> delete from

delphi數據庫進行增加操作,怎麽判斷插入的這個值是否已經存在?

span 數據 for sage dcl 進行 emp rom trim //增 procedure TForm1.btnAddClick(Sender: TObject); begin ADOQuery1.Close; ADOQuery1.SQ

delphi資料庫進行增加操作,怎麼判斷插入的這個值是否已經存在?

//增 procedure TForm1.btnAddClick(Sender: TObject); begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('select * from AZZ whe

使用Navicat for MySQL進行Excel文件導資料

步驟一 執行“匯入嚮導”,選擇匯入資料的型別,選擇表型別:Excel 檔案。 步驟二 選擇檔案資料來源,即選擇需要匯入的 Excel 檔案的位置。 步驟三 選擇需要匯入的表。 步驟四 為源定義一些附加選項。 ● 欄位名行:資料表字段所在的行位置; ● 第一個資料行:

C# linq2db操作sqlite進行刪除操作異常

【問題描述】 在對linq2db進行刪除操作前,先將需要刪除的資料集查詢出來, 再呼叫db.[表物件].delete()方法執行刪除操作,程式碼如下: using (SqliteDB db = new SqliteDB(connectionString)) {

es進行聚合操作提示Fielddata is disabled on text fields by default

根據es官網的文件執行 GET /megacorp/employee/_search { "aggs": { "all_interests": { "terms": { "field": "interests" } } } } 這個例子時

{dede:sql}標籤中,取出欄位後,對欄位進行邏輯操作的巢狀方法

<div>{dede:sql sql='select body from dede_addonarticle where typeid=4 order by rand() LIMIT 1'} [field:body runphp='yes']

Redux在處理龐大Store並頻繁進行更新操作的效能

Q:當你擁有一個相當大的 SPA 擁有許多狀態,因為有很多頁面,模組,子模組和許多元素。所有子狀態都關聯 App 中不同的關注點,子狀態由它們自己的 reducer 處理。但是當進行非常頻繁的更新操作,所有的 reducer 都將被呼叫。 當擁有一個如下的 store: store: { sub

Java中使用JSON進行parse操作一個重要的注意事項

最近在寫一個Android專案,其中包含了客戶端與服務端的通訊。通訊使用了JSON來包裝傳輸的資料,當在客戶端試圖解析從服務端得到的String時,解析出來的Class裡的成員變數的值總是null,調了一整天脾氣都調沒了。 結論如下: 假設要解析的類為User,定義如下:

在eclipse中連線資料庫並進行資料庫操作出現空指標異常類java.lang.NullPointerException

java.lang.NullPointerException載入驅動成功!連線資料庫成功!at com.dao.BookDAO.create(BookDAO.java:24)at servlets.Insert_Book_Servlet.doPost(Insert_Book_

用Java進行檔案操作,報出“at java.io.FileOutputStream.(Unknown Source)”錯誤

我用Java編寫檔案管理器時,要寫一個檔案複製的函式,結果遇到“C:\Users\Administrator\eclipse-workspace\project1\bin\Folderdir3\dir2\FileDemo.java (系統找不到指定的路徑。)at java.i

greenDao升級或者是增加欄位或者是增加表造成資料丟失問題

思路就是:把舊錶改為臨時表,建立新表,臨時表資料寫入新表,刪除臨時表,不要忘了新增預設欄位,廢話不多說,直接上程式碼邏輯 public DaoHelper(Context context,String userId) { DaoMaster.OpenHelper

Mysql 中寫操作保駕護航的三兄弟!

這期的文章主要是講述寫操作過程中涉及到的三個日誌檔案,看過前幾期的話可能你或多或少已經有些瞭解了(或者從別的地方也瞭解過)。比如整個寫操作過程中用到的兩階段提交,又或者是操作過程中涉及到的日誌檔案,但是總體來說不是很系統更談不上全面。 今天我們就來會會這三兄弟。 圖注:思維導圖 兩階段提交 這個名詞你應該

程序跟蹤Session老丟失,日誌:拒絕對物件 'sp_sdidebug'(資料庫 'master',所有者 'dbo')的 EXECUTE 許可權

非常奇怪的錯誤:  如果一開始就用程序跟蹤, 根本無法登入。 如果登入進去之後再程序跟蹤, 很容易發生 Session 丟失。 日誌裡顯示:“拒絕了對物件 'sp_sdidebug'(資料庫 'master',所有者 'dbo')的 EXECUTE 許可權”。  處理方

2018 大資料應用及其解決方案都會

目 錄 PART 01 1. 大資料概述 1.1. 概述 1.2. 大資料定義 1.3. 大資料技術發展 PART 02 2. 大資料應用 2.1. 大資料應用闡述 2.2. 大資料應用架構 2.3. 大資料行業應用

懂大資料?這幾種常用的幾種大資料架構剖析

資料分析工作雖然隱藏在業務系統背後,但是具有非常重要的作用,資料分析的結果對決策、業務發展有著舉足輕重的作用。隨著大資料技術的發展,資料探勘、資料探索等專有名詞曝光度越來越高,但是在類似於Hadoop系列的大資料分析系統大行其道之前,資料分析工作已經經歷了長足的發展,尤其是以BI系統為主的資

java中最常見的幾種執行異常,get

NullPointerException  (空指標異常) ClassCastException  (型別強制轉換異常) NumberFormatException  (數字格式異常) NegativeArraySizeException  (陣列大小為負數異常) SecurityException