首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 跨表查詢、更新、刪除實戰範例

     編輯:MySQL 綜合教學

跨表插入 (INSERT ... SELECT)

-- 全欄位複製
INSERT INTO table_A SELECT * FROM table_B;

-- 指定欄位複製 (推薦,避免結構變更報錯)
INSERT INTO table_A (id, name, email)
SELECT id, username, email FROM table_B WHERE status = 1;

跨表更新 (多表 UPDATE)

-- 將 table_B 的 name 同步到 table_A (依 id 關聯)
UPDATE table_A a
JOIN table_B b ON a.id = b.id
SET a.name = b.name, a.updated_at = NOW();

-- 別名簡寫版
UPDATE table_A, table_B
SET table_A.name = table_B.name
WHERE table_A.id = table_B.id;

跨表刪除 (多表 DELETE)

-- 刪除 table_A 中在 table_B 不存在的資料 (反向同步)
DELETE a FROM table_A a
LEFT JOIN table_B b ON a.id = b.id
WHERE b.id IS NULL;

-- 刪除兩表都存在的資料
DELETE a, b FROM table_A a
JOIN table_B b ON a.id = b.id
WHERE a.status = 0;

實戰場景:資料同步腳本範例

-- 1. 新增/更新 (UPSERT)
INSERT INTO target_table (id, name, data, version)
SELECT id, name, data, version FROM source_table
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    data = VALUES(data),
    version = version + 1;

-- 2. 刪除目標端多餘資料
DELETE t FROM target_table t
LEFT JOIN source_table s ON t.id = s.id
WHERE s.id IS NULL;

效能提醒

  • 確保關聯欄位有索引
  • 大批次操作分塊 (每次 1000-5000 行)
  • 避免長事務,設定 innodb_lock_wait_timeout
  • 主從環境注意複製延遲,必要時 SET SESSION sql_log_bin=0
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved