我想使用'insert into'mysql命令將table1內容移動到table2,但是table2可能具有'相同'主鍵。我想在執行insert語句時將table2的記錄(具有相同的主鍵)替換爲table1的記錄。我可以使用'或替換'來實現這一點嗎?從表1中插入或替換到表2中
回答
使用一個INSERT ... SELECT與對重複KEY UPDATE子句:
INSERT INTO table2
SELECT * FROM table1 ON DUPLICATE KEY UPDATE table2.field1 = table1.field1
注使用*爲了簡潔,但UPDATE子句中你必須單獨指定字段,應該這麼做插入和選擇子句也是如此。
那麼當你試圖在每個表中插入'like'主鍵時,mysql會做什麼?它會拋出一個錯誤嗎? – alrightgame 2012-08-01 16:07:55
當你說「like」時,你的意思是重複的?然後通常是的;但它取決於您的服務器所處的模式。「ON DUPLICATE KEY」子句可以通過告訴服務器執行更新而不是拋出錯誤來規避該錯誤。 – 2012-08-01 16:15:51
嘗試是這樣的(不知道您的具體模式,這隻能是一個例子)
INSERT INTO tbl_a (a,b,c)
SELECT a,b,c FROM tbl_b
ON DUPLICATE KEY UPDATE b = tbl_b.b, c = tbl_b.c
如果指定了對重複密鑰更新,和行被插入,這會在UNIQUE索引或PRIMARY KEY中產生重複值,執行舊行的更新
如果在表2是在表1鍵重複的主鍵不被其他地方的外鍵稱,最簡單的方法是使用REPLACE ... INTO:
「REPLACE作品酷似INSERT,不同之處在於,如果一個老表中的行與PRIMARY KEY或UNIQUE索引的新行具有相同的值,則在插入新行之前刪除舊行。「
所以,你會做這樣的事情:
REPLACE INTO table2 (a, b, c)
SELECT a, b, c FROM table1;
它將table2
爲你的鑰匙,所以任何行挑選出具有相同ID作爲table1
一排由table1
的覆蓋行數據。
這真的取決於是否有外鍵在這裏使用 - 如果有和他們正在使用級聯刪除 - 然後好關聯的數據...這是因爲'替換...到'刪除然後插入 – ManseUK 2012-08-01 16:21:22
已編輯爲了體現這一點,謝謝。 – 2012-08-01 16:24:20
- 1. 從1表格中插入2表格
- 2. 從表插入到表2 1
- 3. SQL SELECT插入從表2到表1
- 4. 插入觸發器從表1插入到表格2
- 5. 從2個表插入1個表
- 6. 柱插入2表表1
- 7. OLEDB插入到替換表中的行
- 8. 從2個或不同表的列名插入值到表中?
- 9. 如何將表1中的數據插入到表2中php
- 10. 插入從表2表1,表1,但有主鍵VB.NET SQL.server
- 11. 首先選擇從表1表2中以插入的mysqli PHP
- 12. SQL插入到ColX表1從表2中選擇ColY其中Table1.colA = Table2.ColB
- 13. 在SQL中插入表1到表2的數據
- 14. 將值插入到表1中時觸發器將值插入到表1中
- 15. 只有在表1中找到要插入的值時才插入表2
- 16. 在2表中插入值,其中第2表需要第1表中的ID
- 17. 插入或替換2個唯一值
- 18. 更新字段從表1到表2其中表2
- 19. 的MySQL從表1中,其中表2
- 20. 從表2加入表1至任一塔1或2無重複
- 21. 更新從單列表中的列1到列2的值替換查詢
- 22. MYSQL表2中的表1更新記錄插入新記錄
- 23. 如果表2中不存在如何插入表1?
- 24. 如果在「表」中滿足條件,插入「表1」2 SQL
- 25. 在引用表2和3時將數據插入表2中的表1
- 26. mysql插入tbl(從2表中選擇)
- 27. 如何從表1字段向表2字段插入數據
- 28. 在插入語句MySql中插入表2中自動遞增的ID到表1中
- 29. JOIN 2 SQL表(表1中的1個字段替換另一個表中的1個字段)
- 30. 在SQLite中插入或替換
'重複的主鍵'是有點矛盾...... – 2012-08-01 15:56:17
@MarcB我認爲他的意思與表1的主鍵重複 – 2012-08-01 15:57:38
我會'相同',而不是重複尊重英語。 – alrightgame 2012-08-01 15:59:10