数据操作 DML

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 平时写 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;
目录
相关文章
|
存储 人工智能 固态存储
“从零开始,打造电脑高手—DIY组装硬件全方位攻略,带你从小白秒变叫兽“
“从零开始,打造电脑高手—DIY组装硬件全方位攻略,带你从小白秒变叫兽“
770 0
“从零开始,打造电脑高手—DIY组装硬件全方位攻略,带你从小白秒变叫兽“
|
存储 Linux 开发工具
成功解决centos7安装docker时 报缺 少container-selinux和fuse-overlayfs包
成功解决centos7安装docker时 报缺 少container-selinux和fuse-overlayfs包
6754 1
成功解决centos7安装docker时 报缺 少container-selinux和fuse-overlayfs包
|
12月前
|
算法 Java API
2025 版 Java 零基础入门到精通实操指南
这篇文章为零基础学习者提供了Java入门的全面指南。首先介绍了Java的特点和用途,然后详细讲解了环境搭建步骤(JDK安装、环境变量配置和IDE选择),并以&quot;Hello World&quot;程序为例演示了开发流程。文章还系统性地讲解了Java核心语法,包括变量与数据类型、运算符、控制流语句、数组和方法等基础知识,以及面向对象编程和异常处理的概念。通过代码示例帮助读者理解和实践,最后建议掌握基础后可进一步学习Java高级特性和框架。文中还提供了代码获取方式和关注入口,适合Java初学者系统学习。
1300 2
|
11月前
|
自然语言处理 前端开发 JavaScript
用 通义灵码 一键生成“水波纹按钮”,连 CSS 动画都不用自己写了!
通义灵码是一款智能编程辅助工具,它可以根据自然语言指令自动生成高质量的代码。例如,只需输入“生成一个按钮,点击时带水波纹动画,模拟 Material Ripple 效果”,它就能生成具备完整交互逻辑、CSS 动画和良好性能的按钮组件。不仅如此,它还支持拓展功能,如长按触发提示、添加图标等,并能自动优化样式适配不同场景。通过通义灵码,开发者可以大幅提升效率,专注于创意实现,而不必纠结于繁琐的代码细节。
|
人工智能 IDE 测试技术
通义灵码 AI 程序员(版本2.0)测评文档
《通义灵码 2.0 测评文档》概述了该工具在AI程序员交互、多文件代码修改、单元测试生成、多轮对话及快照管理等方面的核心功能评估。通过实际测试,验证其提高开发效率、减少重复劳动和提升代码质量的效果。测评涵盖Windows系统与JetBrains IDE环境,针对插件版本2.0.0进行详细的功能测试,包括需求解析准确性、跨文件修改稳定性、单元测试自动生成及用户界面设计等。总结指出,通义灵码 2.0 在多文件修改、单元测试生成和用户体验方面表现出色,但在复杂需求解析和大规模项目性能上仍有改进空间。
786 19
|
Kubernetes 关系型数据库 数据库
使用 Helm 部署 Wikijs
使用 Helm 部署 Wikijs
|
人工智能 搜索推荐 安全
人工智能与未来社会:探索AI在教育领域的革命性影响
本文深入探讨了人工智能(AI)技术在教育领域的潜在影响和变革。通过分析AI如何个性化学习路径、提高教学效率以及促进教育资源的公平分配,我们揭示了AI技术对教育模式的重塑力量。文章还讨论了实施AI教育所面临的挑战,包括数据隐私、伦理问题及技术普及障碍,并提出了相应的解决策略。通过具体案例分析,本文旨在启发读者思考AI如何助力构建更加智能、高效和包容的教育生态系统。
|
SQL 自然语言处理 安全
2024 年 8 月暨 ACL 2024 57篇代码大模型论文精选
2024年8月中旬,国际计算语言学大会ACL在泰国曼谷举行,展示了48篇代码大模型相关论文,包括24篇主会论文和24篇findings论文。主会论文涵盖XFT、WaveCoder、DolphCoder等创新方法,findings论文则探讨了代码注释增强、自动化程序修复等主题。此外,还额外整理了9篇8月最新代码大模型论文,涉及数据集合成、安全代码生成等多个前沿方向。欲了解更多,请访问我们的综述和GitHub项目。
1915 4
|
机器学习/深度学习 算法 Python
贝叶斯优化在XGBoost及随机森林中的使用
本文简单讲解XGBoost和随机森林模型的优缺点,并引入贝叶斯优化去调整模型参数,找到模型参数最优解。
6648 0