insert
-- 插入完整数据
INSERT INTO emp (id, workno, name, gender, age, idcard, entrydate, username)
VALUES (2, '002', '李四', '女', 22, '110101200102024321', '2024-02-01', 'lisi');
-- 插入部分数据
INSERT INTO emp (name, age, gender)
VALUES ('王五', 30, '男');
-- 批量插入
INSERT INTO emp (name, age)
VALUES ('赵六', 27),
('钱七', 24);


update
UPDATE 用于修改表中已存在的数据,是核心的写操作之一,使用时要格外谨慎!
1. 基础语法(最常用)
① 标准完整写法
UPDATE 表名
SET 字段1 = 新值1, 字段2 = 新值2, ...
[WHERE 条件];
-
SET:指定要修改的字段和新值,多个字段用逗号分隔。 -
WHERE:可选,但强烈建议必须加 ,否则会修改表中所有行! -
示例(修改
emp表中张三的年龄和用户名):UPDATE emp
SET age = 26, username = 'zhangsan_new'
WHERE name = '张三';
② 不加 WHERE 的风险(⚠️ 极度危险)
-- 错误示范:会把整张表的 age 都改成 30!
UPDATE emp
SET age = 30;
这种操作会导致全表数据被覆盖,生产环境中是严重事故!
2. 高级用法
① 基于其他字段计算更新
可以在 SET 中使用表达式,基于现有字段计算新值:
-- 1. 修改单条数据(推荐)
UPDATE emp
SET workno = '001_new', gender = '男'
WHERE id = 1;
-- 2. 批量修改符合条件的数据
UPDATE emp
SET entrydate = '2024-01-01'
WHERE entrydate IS NULL;
-- 3. 基于表达式更新
UPDATE emp
SET age = age + 1
WHERE gender = '女';
② 多条件筛选更新
WHERE 子句可以用 AND/OR 组合多个条件,精准定位要修改的行:
-- 修改性别为女、年龄小于25的员工的入职日期
UPDATE emp
SET entrydate = '2024-03-01'
WHERE gender = '女' AND age < 25;
③ 结合子查询更新(进阶)
可以用子查询的结果作为新值:
-- 将工号为001的员工的入职日期,改为和工号002的员工相同
UPDATE emp
SET entrydate = (SELECT entrydate FROM emp WHERE workno = '002')
WHERE workno = '001';
3. 常见问题与注意事项
🔴 常见错误
-
忘记加 WHERE 条件
- 后果:全表数据被修改,无法恢复(除非有备份或事务回滚)。
-
字段与值类型不匹配
-- 错误:age 是数字类型,却赋值字符串 UPDATE emp SET age = '二十六' WHERE name = '张三'; -
条件过于宽泛
- 比如
WHERE name LIKE '张%',可能会修改多条你不想改的数据。
- 比如
-
先查后改 :执行
UPDATE前,先用SELECT验证WHERE条件筛选的行是否正确
🟢 安全操作技巧
-- 先确认要修改的行
SELECT * FROM emp WHERE name = '张三';
-- 确认无误后再执行 UPDATE
使用事务(InnoDB 引擎支持):在事务中执行 UPDATE,发现错误可以回滚:
BEGIN;
UPDATE emp SET age = 26 WHERE name = '张三';
-- 检查结果后,确认无误再提交
COMMIT;
-- 出错则回滚
ROLLBACK;
4. 完整示例(基于你的 emp 表)
-- 1. 修改单条数据(推荐)
UPDATE emp
SET workno = '001_new', gender = '男'
WHERE id = 1;
-- 2. 批量修改符合条件的数据
UPDATE emp
SET entrydate = '2024-01-01'
WHERE entrydate IS NULL;
-- 3. 基于表达式更新
UPDATE emp
SET age = age + 1
WHERE gender = '女';
5. 与 INSERT/DELETE 的对比
| 操作 | 作用 | 能否回滚 | 风险等级 |
|---|---|---|---|
INSERT |
新增数据 | 可以 | 低 |
UPDATE |
修改数据 | 可以 | 中(不加 WHERE 则极高) |
DELETE |
删除数据 | 可以 | 高 |
delete
1、DELETE FROM 表名 WHERE 条件;
-- 删除 id=1 的这条数据
DELETE FROM emp WHERE id = 1;
-- 删除年龄大于 60 的所有人
DELETE FROM emp WHERE age > 60;
-- 不加 WHERE → 删除表中所有数据!
DELETE FROM emp;
TRUNCATE TABLE 表名;
2、作用
一次性清空整个表的所有数据,表还在,数据全没。
TRUNCATE TABLE emp;
3、DELETE 和 TRUNCATE 的区别(必背)
| 特点 | DELETE FROM 表 | TRUNCATE TABLE 表 |
|---|---|---|
| 删除范围 | 可删指定行 | 只能清空全表 |
| 能否加 WHERE | 可以 | 不可以 |
| 速度 | 较慢 | 极快 |
| 自增 ID | 不会重置 | 会重置从 1 开始 |
| 是否可回滚 | 可以(事务里) | 一般不可回滚 |
4、 最简单记忆
- 想删某几条数据 → 用
DELETE ... WHERE ... - 想清空整个表、从头再来 → 用
TRUNCATE TABLE