当前位置: 首页 > news >正文

MySQL从入门到精通(四):SQL语言—DML

目录

一、DML

(一)、表结构设计

1. 图书信息表 book

2. 订单记录表 book_order

(二)、创建数据库与表

(二)、INSERT 插入数据

2.1 给指定字段添加数据

2.2 给全部字段添加数据

2.3 批量添加数据

(三)、UPDATE 更新数据

(四)、DELETE 删除数据


一、DML

(一)、表结构设计

设计一个简化的在线书店数据库,包含图书信息表订单记录表,涵盖以下 DML 操作:

  • 插入数据(基础插入、批量插入、默认值处理)
  • 更新数据(单字段更新、多字段更新)
  • 删除数据(条件删除、全部删除)

1. 图书信息表 book

字段名数据类型允许为空默认值主键/外键注释
book_idINT-主键自增唯一标识
titleVARCHAR(100)--书名(必填)
authorVARCHAR(50)--作者(必填)
priceDECIMAL(10,2)--价格(必填,精确到小数点后两位)
stockINT0-库存量(默认为0)
publish_dateDATE'2025-01-01'-出版日期(默认未来日期)

2. 订单记录表 book_order

字段名数据类型允许为空默认值主键/外键注释
order_idINT-主键自增唯一标识
book_idINT-外键关联 book.book_id(图书ID)
quantityINT--购买数量(必填)
order_timeDATETIMECURRENT_TIMESTAMP-下单时间(默认为当前时间)
statusENUM('pending','shipped','cancelled')'pending'-订单状态(默认待处理)

(二)、创建数据库与表

-- 创建数据库
CREATE DATABASE IF NOT EXISTS online_bookstore DEFAULT CHARSET utf8mb4;
USE online_bookstore;-- 图书信息表(包含默认值、自增主键)
CREATE TABLE book (book_id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(100) NOT NULL,author VARCHAR(50) NOT NULL,price DECIMAL(10,2) NOT NULL,stock INT DEFAULT 0 COMMENT '库存量',publish_date DATE DEFAULT '2025-01-01'
) ENGINE=InnoDB;-- 订单记录表(外键约束、默认状态)
CREATE TABLE book_order (order_id INT PRIMARY KEY AUTO_INCREMENT,book_id INT NOT NULL,quantity INT NOT NULL,order_time DATETIME DEFAULT CURRENT_TIMESTAMP,status ENUM('pending', 'shipped', 'cancelled') DEFAULT 'pending',FOREIGN KEY (book_id) REFERENCES book(book_id)
) ENGINE=InnoDB;

(二)、INSERT 插入数据

2.1 给指定字段添加数据

  • 具体语法
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
-- 插入单条图书(指定部分字段,使用默认值)
INSERT INTO book (title, author, price) 
VALUES ('深入理解MySQL', '姜承尧', 89.99);

2.2 给全部字段添加数据

  • 具体语法
INSERT INTO 表名 VALUES (值1, 值2, ...);
-- 完全插入(手动设置所有字段,含自增占位)
INSERT INTO book
VALUES (NULL, 'MySQL 8.0 参考手册', '王健林', 89.99, 10, '2023-01-01')

2.3 批量添加数据

  • 具体语法
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值
1, 值2, ...) ;
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;
  • 每条记录之间用 “,” 分割。
-- 批量插入图书
INSERT INTO book (title, author, price, stock) 
VALUES ('SQL必知必会', 'Ben Forta', 45.00, 30),('数据库系统概念', 'Abraham Silberschatz', 150.00, 20);
-- 批量插入 方法二 INSERT INTO book 
VALUES (DEFAULT, '高性能MySQL', 'Baron Schwartz', 129.50, 50, '2024-05-01'),
(DEFAULT, 'java程序设计', 'Schwartz', 271, 50, '2025-05-01');

注意事项:

• 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。

• 字符串和日期型数据应该包含在引号中。

• 插入的数据大小,应该在字段的规定范围内。

(三)、UPDATE 更新数据

  • 具体语法
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
-- 更新单字段:减少库存(当订单生成时)
UPDATE book SET stock = stock - 2 WHERE book_id = 1;
-- 更新多字段:修改图书价格与出版日期
UPDATE book 
SET price = 99.99, publish_date = '2025-03-15' 
WHERE author = '姜承尧';
-- 订单状态更新为已发货
UPDATE book_order 
SET status = 'shipped' 
WHERE order_id = 1;

注意事项: 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

(四)、DELETE 删除数据

  • 具体语法
 DELETE FROM 表名 [ WHERE 条件 ] ;
-- 删除特定订单(条件删除)
DELETE FROM book_order WHERE status = 'cancelled';
-- 删除所有订单
DELETE FROM book_order;

注意事项:

• DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。

• DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即可)。 • 当进行删除全部数据操作时,datagrip会提示我们,询问是否确认删除,我们直接点击 Execute即可。

完结撒花🎉

相关文章:

  • 题解 洛谷 Luogu P1073 [NOIP 2009 提高组] 最优贸易 强连通分量 Tarjan 缩点 拓扑排序 动态规划 C++
  • 卷积神经网络基础(六)
  • 基于深度学习的交通标志识别系统
  • 在Ubuntu 22.04 上安装 JDK 1.8.0_281,同时保留现有的 JDK 17.0.15
  • 基于LVS实现负载均衡,对NAT模式的介绍和使用案例
  • 模型中台建设全流程指南
  • 体育培训的实验室管理痛点 质检LIMS如何重构体育检测价值链
  • 经典密码学算法实现
  • [20250507] AI边缘计算开发板行业调研报告 ​​(2024年最新版)​
  • STM32的看门狗
  • C/C++ Python绑定工具: nanobind 使用指南与示例
  • 如何用命令行判断一个exe是不是c#wpf开发的
  • 金融企业如何借力运维监控强化合规性建设?
  • Linux系列:如何用perf跟踪.NET程序的mmap泄露
  • 点云采集学习个人记录
  • Mkdocs文档引用相对地址的一些问题
  • 从D盘分配空间为C盘扩容?利用工具1+1>2
  • uni-app实现完成任务解锁拼图功能
  • MySQL OCP和Oracle OCP怎么选?
  • POI处理EXCEL
  • wordpress 开发飞猪接口/14个seo小技巧
  • 怎么做音乐网站/重庆seo关键词优化服务
  • 湖北建设监理协会网站/百度推广一个点击多少钱
  • 郑州教育培训机构网站建设/国内手机怎么上google浏览器
  • 银川市建设工程质量监督站网站/镇江网站建设制作公司
  • eclipse可以做网站吗/网站搜索排名优化