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

MySQL 學習筆記:INSERT/UPDATE/DELETE 與 SQL Server 差異深度對比

     編輯:MySQL 綜合教學

INSERT 插入操作

1. INSERT ... SELECT 多行複製 (同標準)


INSERT INTO person(id, name, age, info) 
SELECT id, name, age, info FROM person_old;

2. 重復鍵衝突處理:MySQL 三大神器 vs SQL Server 單一選項

方案MySQL 語法行為SQL Server 對應
忽略衝突INSERT IGNORE INTO ...衝突行靜默跳過,不報錯,不回滾其他行建表指定 WITH (IGNORE_DUP_KEY = ON) (僅適用唯一索引,非主鍵)
替換現有REPLACE INTO ...衝突時**先刪除舊行,再插入新行** (觸發 DELETE+INSERT 觸發器,自增 ID 會變)MERGE / UPSERT 模式
更新現有INSERT ... ON DUPLICATE KEY UPDATE col=VALUES(col)衝突時**更新指定列**,保留主鍵 ID,性能最佳MERGE / UPSERT

實戰演示 INSERT IGNORE:


TRUNCATE TABLE person;
INSERT INTO person_old VALUES (11,'Harry',20,'student'),(12,'Beckham',31,'police');
INSERT INTO person(id,name,age,info) SELECT id,name,age,info FROM person_old;  -- 成功
INSERT INTO person_old VALUES (13,'Kay',26,'student');  -- 新增一行
INSERT IGNORE INTO person(id,name,age,info) SELECT id,name,age,info FROM person_old;  -- 僅插入 Kay,前兩行忽略

3. 自增列插入靈活度:MySQL 完勝

  • SQL Server:需 SET IDENTITY_INSERT tbl ON 才能顯式插入自增值,否則報錯。插入後需 OFF。
  • MySQL:完全自由
    • 指定 ID:INSERT INTO person(id,name,age,info) VALUES (16,'Tom',88,'student') (無衝突即可)
    • 傳 NULL:INSERT INTO person(id,name,age,info) VALUES (NULL,'Amy',12,'bb') → 自動生成
    • 不寫 ID 列:INSERT INTO person(name,age,info) VALUES ('Amy',12,'bb') → 自動生成

4. 唯一索引 NULL 值語義差異 (巨坑!)

  • MySQL:UNIQUE 索引**允許多個 NULL** (視為不同值)。INSERT INTO t(a) VALUES (NULL), (NULL); 成功
  • SQL Server:UNIQUE 索引**僅允許一個 NULL**。第二個報錯 Cannot insert duplicate key row ... value is

UPDATE 更新操作

語法基本一致,MySQL 支持多表更新:


UPDATE person p
JOIN person_old o ON p.id = o.id
SET p.info = 'police'
WHERE p.id BETWEEN 14 AND 17;

DELETE 刪除操作

命令行為速度自增計數器觸發器
DELETE FROM person WHERE id BETWEEN 14 AND 17逐行刪除,記錄 Binlog (ROW 格式每行一條)慢保留觸發 FOR EACH ROW
TRUNCATE TABLE person直接釋放數據頁,重建表結構,不記錄行級 Binlog極快**重置為 1****不觸發**

驗證自增重置:


TRUNCATE TABLE person;
INSERT INTO person(name,age,info) VALUES ('Amy',12,'bb');
SHOW TABLE STATUS LIKE 'person';
-- Auto_increment: 2 (說明從 1 開始)

總結:MySQL vs SQL Server 核心差異

  1. 重復鍵處理:MySQL 提供 IGNORE/REPLACE/ON DUPLICATE KEY UPDATE 三利器,靈活強大;SQL Server 依賴表選項 IGNORE_DUP_KEY 或 MERGE
  2. 自增列控制:MySQL 極度靈活 (指定/NULL/省略均可);SQL Server 需開關 IDENTITY_INSERT
  3. UNIQUE NULL 語義:MySQL 多 NULL;SQL Server 單 NULL — **遷移時必測!**
  4. TRUNCATE:行為一致 (重置自增、極快、不觸發觸發器)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved