数据操作 DML

简介: 平时写 SQL,插入、更新、删除这几个操作用得可太频繁了。这篇文章就带你一步步练一下,怎么往表里加数据,怎么改字段,怎么删指定行,顺便聊聊 truncate 快速清空表的用法。例子简单清楚,还有对应的练习题,跟着敲一遍就会用啦~

作者:IvanCodes
日期:2025年6月6日

核心目标: 学习如何在表中插入、更新和删除数据行。

前提: 操作前需使用 use database_name; 选择目标数据库。以下示例假设已选定数据库。

示例表结构 (供参考):

create table students (
student_id int,
first_name varchar(50),
last_name varchar(50),
major varchar(50),
gpa decimal(4, 2)
);

create table products (
product_id int,
product_name varchar(100),
price decimal(10, 2),
stock_quantity int
);

一、插入数据 (insert)

  • 作用: 向表中添加新的数据行。

  • 指定列插入 (推荐):
    明确指定要插入数据的列名和对应的值。列与值的顺序必须一致。

insert into table_name (column1, column2, ...)
values (value1, value2, ...);

示例:

insert into students (student_id, first_name, last_name, major, gpa)
values (101, '张', '三', '计算机科学', 3.50);

insert into products (product_id, product_name, price)
values (501, '笔记本电脑', 5999.99); -- stock_quantity 会是 NULL 或默认值
  • 按表结构顺序插入所有列 (不推荐):
    不指定列名,按表定义顺序提供所有列的值。
insert into table_name values (value_for_col1, value_for_col2, ...);

示例: (假设 students 列顺序为 id, first, last, major, gpa)

insert into students values (102, '李', '四', '物理学', 3.20);
  • 一次插入多行 (效率更高):
    values 后提供多个用逗号分隔的值元组。
insert into table_name (column1, column2, ...)
values
(value1a, value2a, ...),
(value1b, value2b, ...),
(value1c, value2c, ...);

示例:

insert into products (product_id, product_name, price, stock_quantity)
values
(502, '无线鼠标', 129.00, 150),
(503, '机械键盘', 499.50, 80),
(504, '显示器', 1200.00, 50);

二、更新数据 (update)

  • 作用: 修改表中已存在的数据行。

  • 语法:

update table_name
set column1 = new_value1,
column2 = new_value2,
...
[where condition;] -- !!! 极其重要:指定要更新哪些行 !!!
  • !!! 警告:如果省略 where 子句,将更新表中的 所有 行!务必万分小心 !!!

  • 示例:

-- 更新学号为 101 的学生的专业
update students
set major = '软件工程'
where student_id = 101;

-- 将所有计算机科学专业学生的 GPA 增加 0.1
update students
set gpa = gpa + 0.1
where major = '计算机科学';

-- 更新产品 ID 为 502 的价格和库存
update products
set price = 135.00,
stock_quantity = stock_quantity - 10
where product_id = 502;

-- !!! 危险示例:将所有产品价格设为 0 (因为没有 WHERE) !!!
-- update products set price = 0.00; -- 极度危险操作!

三、删除数据 (delete)

  • 作用: 从表中删除数据行。

  • 语法:

delete from table_name [where condition]; -- !!! 极其重要:指定要删除哪些行 !!!
  • !!! 警告:如果省略 where 子句,将删除表中的 所有 行!务必万分小心 !!!

  • 示例:

-- 删除学号为 102 的学生记录
delete from students where student_id = 102;

-- 删除所有 GPA 低于 2.0 的学生记录
delete from students where gpa < 2.0;

-- 删除库存为 0 的产品记录
delete from products where stock_quantity = 0;

-- !!! 危险示例:删除 students 表中的所有记录 (因为没有 WHERE) !!!
-- delete from students; -- 极度危险操作!

四、清空表数据 (truncate table)

  • 作用: 快速删除表中的 所有 行。通常比无 where 条件的 delete 更快。

  • 语法:

truncate table table_name;
  • 特点:

    • 速度快。
    • 通常会重置自增列的计数器。
    • 操作可能无法回滚(属于 DDL 特性)。
    • 不触发 delete 触发器。
  • 示例:

-- 快速清空临时日志表
truncate table temp_logs;

练习题

假设你已创建 studentsproducts 表,并可能已插入部分数据。

初始数据参考 (仅供理解题目背景):

students 表 (可能包含):

student_id first_name last_name major gpa
101 计算机科学 3.50
103 计算机科学 3.80
104 化学 2.90

products 表 (可能包含):

product_id product_name price stock_quantity
501 笔记本电脑 5999.99 20
502 无线鼠标 129.00 150
503 机械键盘 499.50 80
505 U盘 64GB 65.00 200

请编写 SQL 语句完成以下 DML 操作:

  1. students 表插入一条新记录:学号 107,姓名 '钱 七',专业 '金融学',GPA 3.75。
insert into students (student_id, first_name, last_name, major, gpa) values (107, '钱', '七', '金融学', 3.75);
  1. products 表一次性插入两条记录:

    • 产品 ID 506, 名称 '蓝牙耳机', 价格 299.00, 库存 120
    • 产品 ID 507, 名称 '充电宝', 价格 150.00, 库存 300
insert into products (product_id, product_name, price, stock_quantity) values
(506, '蓝牙耳机', 299.00, 120),
(507, '充电宝', 150.00, 300);
  1. students 表中学号为 103 的学生的 GPA 更新为 3.90。
update students set gpa = 3.90 where student_id = 103;
  1. products 表中所有价格低于 200 元的产品的库存量增加 50。
update products set stock_quantity = stock_quantity + 50 where price < 200.00;
  1. products 表中产品 ID 为 503 '机械键盘' 的价格降低 50 元,同时名称修改为 '游戏机械键盘'。
update products set price = price - 50, product_name = '游戏机械键盘' where product_id = 503;
  1. 删除 students 表中学号为 104 的学生记录。
delete from students where student_id = 104;
  1. 删除 products 表中库存量少于 100 的所有产品记录。
delete from products where stock_quantity < 100;
  1. (如果需要练习清空) 使用 truncate 命令清空 students 表。
-- truncate table students;
目录
相关文章
|
存储 Linux 开发工具
成功解决centos7安装docker时 报缺 少container-selinux和fuse-overlayfs包
成功解决centos7安装docker时 报缺 少container-selinux和fuse-overlayfs包
6017 1
成功解决centos7安装docker时 报缺 少container-selinux和fuse-overlayfs包
|
6月前
|
自然语言处理 API 开发工具
端午出游高定:通义灵码+高德 MCP 10 分钟定制出游攻略
本文介绍了如何使用通义灵码编程智能体和高德MCP 2.0制作北京端午3天旅行攻略页面。首先需下载通义灵码AI IDE并获取高德申请的key,通过添加MCP服务、生成travel_tips.html文件完成初步攻略制作。用户可自定义页面风格、固定基础功能页面生成,并扩展MCP服务以满足多样化需求。文章还详细描述了开发专属MCP服务的过程,包括借助通义灵码编写代码、部署服务及调用工具,最终实现个性化旅游攻略生成。此外,提供了相关资料和参考链接,方便读者深入了解和实践。
|
5月前
|
自然语言处理 前端开发 JavaScript
用 通义灵码 一键生成“水波纹按钮”,连 CSS 动画都不用自己写了!
通义灵码是一款智能编程辅助工具,它可以根据自然语言指令自动生成高质量的代码。例如,只需输入“生成一个按钮,点击时带水波纹动画,模拟 Material Ripple 效果”,它就能生成具备完整交互逻辑、CSS 动画和良好性能的按钮组件。不仅如此,它还支持拓展功能,如长按触发提示、添加图标等,并能自动优化样式适配不同场景。通过通义灵码,开发者可以大幅提升效率,专注于创意实现,而不必纠结于繁琐的代码细节。
|
6月前
|
算法 Java API
2025 版 Java 零基础入门到精通实操指南
这篇文章为零基础学习者提供了Java入门的全面指南。首先介绍了Java的特点和用途,然后详细讲解了环境搭建步骤(JDK安装、环境变量配置和IDE选择),并以&quot;Hello World&quot;程序为例演示了开发流程。文章还系统性地讲解了Java核心语法,包括变量与数据类型、运算符、控制流语句、数组和方法等基础知识,以及面向对象编程和异常处理的概念。通过代码示例帮助读者理解和实践,最后建议掌握基础后可进一步学习Java高级特性和框架。文中还提供了代码获取方式和关注入口,适合Java初学者系统学习。
998 2
|
6月前
|
存储 芯片
移动硬盘突然打不开了?别急,有办法解决
对于不少人来说,移动硬盘是存放重要文件、照片、视频和备份资料的“宝库”。但在某天,当你满怀期待地将移动硬盘插入电脑时,却发现它根本打不开,甚至连盘符都不见了。这时候,不少人第一反应就是“完了,数据是不是没了?”别急,移动硬盘打不开不等于数据彻底消失。本文将带你逐步排查问题,并分享一些切实可行的解决方法。
|
6月前
|
JavaScript 前端开发 UED
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发四
本文介绍了Web组件开发与性能优化的相关内容。在Web组件开发部分,涵盖创建组件、设置样式与属性、添加事件和方法以及场景示例,如动态播放视频。性能提升方面,推荐使用数据懒加载、条件渲染替代显隐控制、Column/Row替代Flex、设置List组件宽高及调整cachedCount减少滑动白块等方法,以优化应用性能与用户体验。
268 56
|
3月前
|
人工智能 安全 程序员
RAG系统大脑调教指南:模型选择、提示设计与质量控保一本通
本文用轻松幽默的方式解密如何在RAG系统中选择、调教和监督生成模型,让它成为一个既聪明又靠谱的知识助手。从模型选择到提示工程再到质量控制,手把手教你如何避开AI的「胡言乱语」陷阱。
179 11
|
8月前
|
SQL Oracle 关系型数据库
在MySQL Shell里 重启MySQL 8.4实例
在MySQL Shell里 重启MySQL 8.4实例
253 2
|
监控 前端开发 JavaScript
前端稳定性工具-Sentry
【11月更文挑战第9天】Sentry 是一个开源的错误和性能监控平台,支持多种编程语言和框架。它能够捕获前端应用中的各种错误和性能问题,提供详细的错误信息和用户行为关联,帮助开发团队快速定位和解决问题,优化应用性能。但需注意隐私保护、数据准确性和成本控制。
1535 3