INSERT、UPDATE、DELETE 是業務邏輯的基石,事務是數據一致性的保障。本文通過實戰案例系統講解三大 DML 操作的語法細節、最佳實踐與陷阱,並演示 MySQL 命令行下的手動事務控制流程。
CREATE TABLE `test22` (`id` INT, `name` VARCHAR(32));
-- 顯式列名
INSERT INTO `test22` (`id`, `name`) VALUES (3, 'huangbiao');
INSERT INTO `test22` (`name`, `id`) VALUES ('huangbiao2', 5); -- 順序可調整
-- 空字符串 vs NULL
INSERT INTO `test22` (`name`, `id`) VALUES ('', 51); -- 空串 ''
INSERT INTO `test22` (`name`, `id`) VALUES (NULL, 555); -- NULL
-- 部分列插入(其餘走默認值/NULL)
INSERT INTO `test22` (`id`) VALUES (15);
CREATE TABLE `employee` ( `id` INT, `name` VARCHAR(20), `sex` BIT, `birthday` DATE, `salary` FLOAT, `entry_date` DATE, `resume` TEXT ); INSERT INTO `employee` VALUES (1,'aaa',0,'1977-11-11',56.8,NOW(),'hello'), (2,'bbb',0,'1977-11-11',57.8,NOW(),'hello'), (3,'ccc',0,'1977-11-11',56.3,NOW(),'hello'); -- 1. 全表更新(極危險,生產禁用無 WHERE) UPDATE `employee` SET `salary` = 2000; -- 2. 條件更新 UPDATE `employee` SET `salary` = 3000 WHERE `name` = 'zs'; -- 3. 表達式更新(基於原值計算) UPDATE `employee` SET `salary` = `salary` + 100 WHERE `name` = 'wu'; -- 4. 多表更新(JOIN 語法,MySQL 特有) UPDATE `employee` e JOIN `dept` d ON e.`dept_id` = d.`id` SET e.`salary` = e.`salary` * 1.1 WHERE d.`name` = '研發部';
特性 DELETE TRUNCATE 速度 逐行刪除,慢 重建表,極快 事務 支援回滾 隱式提交,不可回滾 觸發器 觸發 AFTER DELETE 不觸發 自增值 保留 重置為 1 外鍵 受約束檢查 若被引用則失敗 適用場景 條件刪除、需回滾、觸發器 全表清空、重置自增、大表快速清理 四、 事務控制實戰(命令行手動模式)
MySQL 默認 `autocommit=ON`,每條 DML 隱式提交。手動事務流程: