1. 搭建单表员工信息表并完成基础增删改查
案例目标与数据模型
本案例在 MySQL 8.0 环境下创建一张员工信息表 emp,通过主键 emp_id 唯一标识每行记录,并完成插入、按主键查询、条件更新和删除四类基础操作。重点观察每次 DML 语句执行后返回的受影响行数(affected rows),它是判断操作是否命中目标记录的直接依据。
建表与初始化数据
先创建表结构,字段类型与约束需与业务含义匹配:emp_id 作为自增主键,name 不允许为空,dept 与 salary 用于后续条件更新。
CREATE TABLE emp (
emp_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
dept VARCHAR(20),
salary DECIMAL(10,2),
hire_date DATE
);
INSERT INTO emp (name, dept, salary, hire_date) VALUES
('张伟', '研发部', 12000.00, '2021-03-15'),
('李娜', '市场部', 9500.00, '2022-07-01'),
('王强', '研发部', 15000.00, '2020-11-20'),
('赵敏', '财务部', 8800.00, '2023-01-09');
执行后应返回 Query OK, 4 rows affected,表示 4 行数据成功写入。
四类基础操作与受影响行数
下面按“查—改—删”的顺序演示,每条语句后都关注返回的受影响行数:
-- 1. 按主键查询:命中 1 行
SELECT * FROM emp WHERE emp_id = 2;
-- 2. 条件更新:给研发部全员加薪 1000
UPDATE emp SET salary = salary + 1000 WHERE dept = '研发部';
-- 预期:2 rows affected
-- 3. 条件更新:命中不存在的主键
UPDATE emp SET salary = 9999 WHERE emp_id = 99;
-- 预期:0 rows affected
-- 4. 按主键删除
DELETE FROM emp WHERE emp_id = 4;
-- 预期:1 row affected
受影响行数是验证 DML 是否命中目标的关键信号:
0 rows affected 通常意味着 WHERE 条件未匹配任何记录,而不是语句语法错误。操作与受影响行数关系图
验证与结果判读
执行完上述语句后,可用以下查询确认最终状态:
SELECT emp_id, name, dept, salary FROM emp ORDER BY emp_id;
预期结果:emp_id=1 与 emp_id=3 的薪资各增加 1000,emp_id=4 的记录已被删除,表中剩余 3 行。若更新后研发部薪资未变化,应检查 WHERE 条件中的部门名称是否与插入值完全一致(含空格与大小写)。
生产环境中执行 UPDATE 或 DELETE 前,建议先用相同 WHERE 条件执行 SELECT 确认命中范围,避免误改或误删。