首頁 > 資料庫 > mysql教程 > 如何使用 MySQL 的'INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE”在插入新記錄時高效更新現有記錄?

如何使用 MySQL 的'INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE”在插入新記錄時高效更新現有記錄?

Susan Sarandon
發布: 2024-12-01 03:42:10
原創
719 人瀏覽過

How Can I Efficiently Update Existing Records While Inserting New Ones Using MySQL's `INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE`?

使用「INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE」來更新現有記錄

將資料插入到某些欄位可能已經存在的表中時存在,您可能需要用新值更新這些列。 MySQL 使用「ON DUPLICATE KEY UPDATE」子句為此類場景提供了方便的語法。

在您的查詢中,您有一個「INSERT INTO」語句,後面跟著一個「SELECT」語句。目標是將新行插入到“lee”表中並更新與唯一鍵相符的現有行。為此,您需要在「ON DUPLICATE KEY UPDATE」子句中指定要更新哪些欄位。

MySQL 將等號(=) 之前的部分解釋為引用「INSERT INTO」中命名的欄位」條款。等號後面的部分指的是「SELECT」子句中的欄位。

例如:

INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, 
                inact, inadur, inadist, 
                smlct, smldur, smldist, 
                larct, lardur, lardist, 
                emptyct, emptydur)
SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, 
       t.inact, t.inadur, t.inadist, 
       t.smlct, t.smldur, t.smldist, 
       t.larct, t.lardur, t.lardist, 
       t.emptyct, t.emptydur 
FROM tmp t WHERE uid=x
ON DUPLICATE KEY UPDATE entct=t.entct, inact=t.inact, ...
登入後複製

在此查詢中,「INSERT INTO」子句中的欄位是未更新的有「exp_id」、「created_by」、「location」、「animal」、「starttime」和「endtime」。所有其他列,例如「entct」、「i nact」、「inadur」、「inadist」等,都會使用「SELECT」子句中的值進行更新。

透過使用正確的語法,您可以在單一查詢中執行插入和更新,確保您的數據有效地保持最新。

以上是如何使用 MySQL 的'INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE”在插入新記錄時高效更新現有記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板