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 条件未匹配任何记录,而不是语句语法错误。

操作与受影响行数关系图

emp 表基础操作与受影响行数判读 emp 表 emp_id PK 自增 name NOT NULL dept salary DECIMAL hire_date INSERT 插入 4 行 → 4 rows affected SELECT 按主键查 emp_id=2 → 命中 1 行 UPDATE 条件更新 dept='研发部' → 2 行 DELETE 按主键删 emp_id=4 → 1 行 受影响行数判读 ≥1 行:命中目标,操作生效 0 行:WHERE 未匹配 0 行:主键不存在 语法错误:报错而非 0 行 更新值相同:可能 0 行 删除后不可回滚(无事务) 建议:先 SELECT 再改删 核心原则:DML 执行后先看受影响行数,再决定是否提交或回滚

验证与结果判读

执行完上述语句后,可用以下查询确认最终状态:

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 确认命中范围,避免误改或误删。