首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL數據增刪改全攻略:INSERT/UPDATE/DELETE 批量操作、條件控制與TRUNCATE對比實戰

     編輯:MySQL 資料庫相關知識

參考表

person(id, name, sex, birth)

INSERT 插入數據

全列插入(須匹配表結構順序)

INSERT INTO person VALUES (1, '張三', '男', 1988);

指定列插入(推薦,順序可調整)

INSERT INTO person (id, name, sex, birth) VALUES (6, '王芳', '女', 1992);

批量插入(單條SQL,性能最優)

INSERT INTO person (id, name) VALUES (8, '錢名'), (9, '章碩');

查詢結果插入(跨表遷移核心)

INSERT INTO person2 (id, name, sex, birth) SELECT * FROM person;

前提:目標列與源查詢列數量、順序、類型完全一致。

複製表結構+數據

CREATE TABLE per AS SELECT * FROM person;

UPDATE 更新數據

單列更新

UPDATE person SET name='小紅' WHERE id=3;

多列更新

UPDATE person SET name='小紅', sex='女' WHERE id=3;

全表更新(極度危險)

UPDATE person SET sex='未知';  -- 無WHERE,全表生效

鐵律:執行UPDATE前必先SELECT確認影響行數。生產環境建議:

  • 開啟safe_updates=1(拒絕無WHERE/無LIMIT的UPDATE/DELETE)
  • 使用LIMIT 1防止誤傷
  • 事務包裹,驗證後提交

DELETE 刪除數據

條件刪除

DELETE FROM person WHERE id=9;

全表刪除(逐行,慢、產生Binlog、觸發器)

DELETE FROM person;

TRUNCATE TABLE(元數據級,極快、不可回滾、重置自增ID)

TRUNCATE TABLE person;
特性DELETETRUNCATE
速度慢(逐行)極快(釋放頁)
事務支持回滾不支持(隱式提交)
觸發器觸發不觸發
自增ID不重置重置為1
外鍵約束檢查失敗(被引用表不可截斷)

最佳實踐檢查清單

  1. 備份先行:`CREATE TABLE bak AS SELECT * FROM target`
  2. 條件驗證:`SELECT * FROM target WHERE ...` 確認影響行
  3. 分批執行:大表 `DELETE ... LIMIT 1000` 循環,避免長事務
  4. 索引配合:WHERE列有索引,避免全表掃描鎖升級
  5. 權限最小化:應用賬號僅授予必要DML權限

數據變更操作不可逆、高風險,建立標準化操作流程(工單、審批、驗證、回滾預案)是DBA職業素養的體現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved