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

发布于:2025-05-08 ⋅ 阅读:(32) ⋅ 点赞:(0)

目录

一、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即可。

完结撒花🎉


网站公告

今日签到

点亮在社区的每一天
去签到