MySQL从入门到精通(四):SQL语言—DML
目录
一、DML
(一)、表结构设计
1. 图书信息表 book
2. 订单记录表 book_order
(二)、创建数据库与表
(二)、INSERT 插入数据
2.1 给指定字段添加数据
2.2 给全部字段添加数据
2.3 批量添加数据
(三)、UPDATE 更新数据
(四)、DELETE 删除数据
一、DML
(一)、表结构设计
设计一个简化的在线书店数据库,包含图书信息表和订单记录表,涵盖以下 DML 操作:
- 插入数据(基础插入、批量插入、默认值处理)
- 更新数据(单字段更新、多字段更新)
- 删除数据(条件删除、全部删除)
1. 图书信息表 book
字段名 | 数据类型 | 允许为空 | 默认值 | 主键/外键 | 注释 |
---|---|---|---|---|---|
book_id | INT | 否 | - | 主键 | 自增唯一标识 |
title | VARCHAR(100) | 否 | - | - | 书名(必填) |
author | VARCHAR(50) | 否 | - | - | 作者(必填) |
price | DECIMAL(10,2) | 否 | - | - | 价格(必填,精确到小数点后两位) |
stock | INT | 是 | 0 | - | 库存量(默认为0) |
publish_date | DATE | 是 | '2025-01-01' | - | 出版日期(默认未来日期) |
2. 订单记录表 book_order
字段名 | 数据类型 | 允许为空 | 默认值 | 主键/外键 | 注释 |
---|---|---|---|---|---|
order_id | INT | 否 | - | 主键 | 自增唯一标识 |
book_id | INT | 否 | - | 外键 | 关联 book.book_id (图书ID) |
quantity | INT | 否 | - | - | 购买数量(必填) |
order_time | DATETIME | 是 | CURRENT_TIMESTAMP | - | 下单时间(默认为当前时间) |
status | ENUM('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即可。
完结撒花🎉