数据的增删改
第七章:数据维护(增删改查)
💡 本章是MySQL实际操作的核心,涵盖DML(数据操纵语言)的所有内容:INSERT、DELETE、UPDATE、SELECT
7.1 概述
| 操作 | 语句 | 说明 |
|---|---|---|
| 增 | INSERT | 向表中插入新数据 |
| 删 | DELETE | 从表中删除数据 |
| 改 | UPDATE | 修改表中已有数据 |
| 查 | SELECT | 查询表中数据 |
7.2 INSERT 插入数据
7.2.1 按列名插入(一一对应式)
INSERT INTO 选课成绩(学号, 课程编号)
VALUES ('U201701002', '2017-2018');
7.2.2 不指定列名插入
-- 教师表有七个属性
INSERT INTO 教师
VALUES ('T013', '徐强', '男', '1993-07-01', '助教', '02', '19920701');
-- 必须按顺序插入七个数据
⚠️ 注意:不指定列名时,VALUES 中的值必须与表结构中的列顺序完全一致!
7.2.3 一次插入多条记录
-- MySQL 支持一次插入多行(比逐条插入效率高!)
INSERT INTO 选课成绩(学号, 课程编号) VALUES
('U201701002', '2017-2018-2-B009'),
('U201701003', '2017-2018-2-B009'),
('U201701001', '2017-2018-2-B009');
| 数据库 | 多行插入方式 |
|---|---|
| SQL Server | 需要多条 INSERT 语句 |
| MySQL | 一条语句可插入多行,用逗号分隔,效率更高 |
7.2.4 对已存在的列补充数据
-- ✗ 错误用法:INSERT 无法单独更新某列
INSERT INTO 教师(籍贯) VALUES ('江西上饶');
-- ✓ 正确用法:使用 UPDATE 语句
UPDATE 教师 SET 籍贯 = '江西抚州' WHERE 姓名 = '徐强';
7.2.5 NULL 值的插入
-- 直接写 NULL(不加引号)
INSERT INTO 教师 VALUES ('T018', '小宇', '男', '助教', '02', NULL, '山东德州');
-- 验证真正的 NULL
SELECT * FROM 教师 WHERE 密码 IS NULL; -- ✓ 正确:查找真正的空值
SELECT * FROM 教师 WHERE 密码 = 'NULL'; -- ✗ 这是查找字符串 'NULL'
💡 此空非彼空!
值 含义 NULL真正的空值,表示"未知"或"不存在" 'NULL'字符串,内容是四个字母 N-U-L-L ''空字符串,长度为0的字符串 判断空值只能用
IS NULL,不能用 = NULL
7.2.6 INSERT 与图形化工具的选择
| 场景 | 推荐方式 |
|---|---|
| 少量数据 | MySQL Workbench 手动编辑 |
| 批量数据 | INSERT INTO ... VALUES 多行插入 |
| 大量数据 | LOAD DATA INFILE 导入文件 |
7.3 DELETE 删除数据
7.3.1 删除表中全部数据
DELETE FROM 表名;
-- 或者使用 TRUNCATE(更快,但不可回滚)
TRUNCATE TABLE 表名;
7.3.2 删除特定数据
-- 使用 WHERE 条件
DELETE FROM 学院 WHERE LENGTH(学院电话) < 8;
-- 删除指定记录
DELETE FROM 教师 WHERE 教师编号 = 'T013';
7.3.3 DELETE vs DROP vs TRUNCATE
| 操作 | 作用 | 保留结构 | 可加WHERE | 可回滚 |
|---|---|---|---|---|
DELETE FROM 表名 |
删除数据 | ✓ | ✓ | ✓ |
TRUNCATE TABLE 表名 |
清空数据 | ✓ | ✗ | ✗ |
DROP TABLE 表名 |
删除整个表 | ✗ | ✗ | ✗ |
💡 记忆技巧:记录用 DELETE,其他用 DROP
7.4 UPDATE 修改数据
7.4.1 修改指定数据
-- 通过编号修改
UPDATE 教师 SET 性别 = '女' WHERE 教师编号 = 'T013';
-- 通过姓名修改(只要能确定记录即可)
UPDATE 教师 SET 性别 = '男' WHERE 姓名 = '徐强';
7.4.2 对一组数据进行有规律的修改
-- 所有成绩打九折
UPDATE 选课成绩 SET 成绩 = 成绩 * 0.9;
-- 查看修改结果
SELECT * FROM 选课成绩;
7.4.3 挑选某些数据进行修改
-- 把长度小于等于8的学院电话前面加上027
-- MySQL 使用 CONCAT() 进行字符串连接
UPDATE 学院
SET 学院电话 = CONCAT('027-', 学院电话)
WHERE LENGTH(学院电话) <= 8;
| 数据库 | 字符串连接方式 |
|---|---|
| SQL Server | '027-' + 学院电话 |
| MySQL | CONCAT('027-', 学院电话) |
⚠️ MySQL 的
+只用于数值运算,字符串连接必须用CONCAT()
7.4.4 修改多个字段
UPDATE 教师
SET 性别 = '男',
职称 = '讲师',
籍贯 = '江西南昌'
WHERE 姓名 = '徐强';
💬 评论