我有兩個表X和Y.他們都有'名稱'共同的列。MYSQL插入到重複的鍵值
X的列是
- ID(自動增量) - 主鍵
- 名
- 電子郵件
- 值。的Y
列是
- ID(自動增量) - 主鍵
- 名
- 性
- 工資
有在X的某些行其是不存在於Y.我想插入那些缺少的行到Y.隨着我也想更新現有的Y中的記錄與X中的記錄具有相同的名稱。
我試圖運行以下查詢。
INSERT INTO Y (name, sex, salary)
SELECT X.name, 'FEMALE' AS sex, '1000' AS salary
FROM X LEFT JOIN Y ON X.name=Y.name
WHERE X.email LIKE '%@test.com'
ON DUPLICATE KEY UPDATE sex='MALE';
但是當我運行,而不是在數據表Y同名更新現有記錄此查詢,它插入新的。
所以我想知道「在重複密鑰更新」只使用主鍵進行比較。是否可以在該子句中給出任何不同的列(名稱)。
你配置表中的唯一索引?添加一個新的唯一索引並添加將是唯一的列,然後它將相應更新而不創建新記錄。 –
'name'是你的主鍵嗎?假設沒有(並且沒有意義的是性和薪水會是),那麼它會插入,因爲你沒有定義關鍵值,所以不會作爲一個騙子匹配。 –
「名稱」不是主鍵。那麼這是否意味着使用ON DUPLICATE KEY UPDATE命令更新記錄是不可能的? – Pattu