MySQL基础篇数据处理之增删改总结

本文介绍了如何在MySQL8中进行数据的增删改查操作,包括VALUES方式插入、指定字段插入、批量插入,以及更新、删除数据的方法。此外,重点讲解了MySQL8新特性——计算列的概念、应用和图书管理实例。
摘要由CSDN通过智能技术生成

在这里插入图片描述

说明:
     此篇文章主要实现对表数据的增删改查,同时把上一篇文章的主要实现总结也在这里展示出来放在文末

1. 数据处理

1.1 插入数据

方式①:VALUES的方式添加

INSERT INTO 表名 
VALUES (value1,value2,....);

     值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同

举例:

INSERT INTO emp1
VALUES (1,'Jerry','2022-06-07',45000);

在这里插入图片描述
②指明添加的字段

INSERT INTO emp1(id, hire_date,salary, `name`)
VALUES (2,'1999-09-09',50000,'Tom');

③同时插入多条数据

INSERT INTO emp1(id,salary,`name`)
VALUES
(4,65000,'Jack'),
(5,66000,'汤姆');

在这里插入图片描述
     方式二:将查询结果添加到表中

INSERT INTO emp1(id,`name`,salary,hire_date)
SELECT employee_id, last_name, salary, hire_date
#查询的字段要与被添加表的字段一一对应,另外,被添加的表的数据类型要一致,数据的长度只能比查询的大
FROM employees
WHERE department_id IN (50,60);

在这里插入图片描述
     小结:一个同时插入多行记录的INSERT语句等同于多个单行插入的INSERT语句,但是多行的INSERT语句在处理过程中 效率更高 。因为MySQL执行单条INSERT语句插入多行数据比使用多条INSERT语句快,所以在插入多条记录时最好选择使用单条INSERT语句的方式插入。

1.2 更新数据

使用格式

UPDATE...SET...WHERE...

举例:

UPDATE emp1
SET hire_date = CURDATE()
WHERE id = 5;

在这里插入图片描述
     同时修改一条数据的多个字段

UPDATE emp1
SET hire_date = CURDATE(),salary = 60000
WHERE id = 4;

在这里插入图片描述

将姓名中包含a的提薪20%

UPDATE emp1
SET salary = salary * 1.2
WHERE name LIKE '%a%';

1.3 删除数据

使用格式:

DELETE FROM ... WHERE(可有可无,没有的话就会把表的数据全部删除)

将id为134的账户删除

DELETE FROM emp1
WHERE id  = 134;

     小结:DML默认情况下,执行完以后都会自动提交数据。如果希望执行完之后不自动提交数据,则需要使用SET autocommit = FALSE

2. MySQL8新特性:计算列

2.1 计算列概念

     简单来说就是某一列的值是通过别的列计算得来的。例如,a列值为1、b列值为2,c列不需要手动插入,定义a+b的结果为c的值,那么c就是计算列,是通过别的列计算得来的。在MySQL 8.0中,CREATE TABLE ALTER TABLE 中都支持增加计算列。

2.2 计算列使用

     举例:定义数据表tb1,然后定义字段id、字段a、字段b和字段c,其中字段c为计算列,用于计算a+b的值。

建表;

CREATE TABLE tb1( 
a INT, 
b INT, 
c INT GENERATED ALWAYS AS (a + b) VIRTUAL
 );
INSERT INTO test1(a,b)
VALUES (10,20);

C的值会根据a和b自动计算

在这里插入图片描述

2.3 图书使用综合案例

1、创建数据库test01_library

CREATE DATABASE test01_library;

2、创建表 books,表结构如下:

/*
字段名 字段说明 数据类型
id 书编号 INT 
name 书名 VARCHAR(50) 
authors 作者 VARCHAR(100) 
price 价格 FLOAT 
pubdate 出版日期 YEAR 
note 说明 VARCHAR(100) 
num 库存 INT
*/
USE test01_library;
CREATE TABLE IF NOT EXISTS books(
id INT,
name VARCHAR(50),
authors VARCHAR(100), 
price FLOAT, 
pubdate YEAR, 
note VARCHAR(100), 
num INT
);

3、向books表中插入记录

1 Tal of AAA Dickes 23 1995 novel 11
2 EmmaT Jane lura 35 1993 joke 22
3 Story of Jane Jane Tim 40 2001 novel 0
4 Lovey Day George Byron 20 2005 novel 30
5 Old land Honore Blade 30 2010 law 0
6 The Battle Upton Sara 30 1999 medicine 40
7 Rose Hood Richard haggard 28 2008 cartoon 28

1)不指定字段名称,插入第一条记录

INSERT INTO books
VALUES(1 ,'Tal of AAA', 'Dickes', 23, 1995, 'novel', 11);

2)指定所有字段名称,插入第二记录

INSERT INTO books(id,name, price,authors, pubdate, num,note)
VALUES(2, 'EmmaT Jane',  35, 'lura', 1993, 22, 'joke');

3)同时插入多条记录(剩下的所有记录)

INSERT INTO books(id,authors,name, price, pubdate,note,num)
VALUES
(3, 'Story of Jane', 'Jane Tim', 40, 2001, 'novel', 0 ),
(4, 'Lovey Day George', 'Byron', 20, 2005, 'novel', 30 ),
(5, 'Old land', 'Honore Blade', 30, 2010, 'law', 0 ),
(6, 'The Battle Upton' ,'Sara', 30, 1999, 'medicine', 40),
(7, 'Rose Hood Richard', 'haggard', 28, 2008, 'cartoon', 28);

4、将小说类型(novel)的书的价格都增加5。

UPDATE books
SET price = price + 5
WHERE note  = 'novel';

5、将名称为EmmaT的书的价格改为40,并将说明改为drama。

USE test01_library;
UPDATE books
SET price = 40, note = 'drama'
WHERE name = 'EmmaT';

6、删除库存为0的记录。

DELETE  FROM books
WHERE num = 0;

7、统计书名中包含a字母的书

SELECT id,name
FROM books
WHERE `name` LIKE '%a%';

8、统计书名中包含a字母的书的数量和库存总量

SELECT COUNT(*), SUM(num)
FROM books
WHERE `name` LIKE '%a%';

9、找出“novel”类型的书,按照价格降序排列

SELECT id, name, price, note
FROM books
WHERE note = 'novel'
ORDER BY price DESC;

10、查询图书信息,按照库存量降序排列,如果库存量相同的按照note升序排列 ********

SELECT *
FROM books
ORDER BY num DESC, note;

11、按照note分类统计书的数量

SELECT note,COUNT(*)
FROM books
GROUP BY note;

12、按照note分类统计书的库存量,显示库存量超过30本的

SELECT note, SUM(num)
FROM books
GROUP BY note
HAVING SUM(num) > 30;

13、查询所有图书,每页显示5本,显示第二页

SELECT *
FROM books
LIMIT 5, 5;

14、按照note分类统计书的库存量,显示库存量最多的

use test01_library;

SELECT note,SUM(num) sum_num
FROM books
GROUP BY note
ORDER BY sum_num DESC
LIMIT 0,1;

15、查询书名达到10个字符的书,不包括里面的空格

SELECT name
FROM books;

SELECT CHAR_LENGTH(REPLACE(name, ' ',''))
FROM books;


SELECT name
FROM books
WHERE CHAR_LENGTH(REPLACE(name, ' ','')) >= 10;

16、查询书名和类型,其中note值为novel显示小说,law显示法律,medicine显示医药,cartoon显示卡通, joke显示笑话

SELECT name '书名', note , CASE note
	WHEN 'novel' THEN
		'小说'
	WHEN 'law' THEN
		'法律'
	WHEN 'medicine' THEN
		'医药'
	WHEN 'cartoon' THEN
		'卡通'
	WHEN 'joke' THEN
		'笑话'
	ELSE
		'其他'
END "类型"
from books;

17、查询书名、库存,其中num值超过30本的,显示滞销,大于0并低于10的,显示畅销,为0的显示需要无货

SELECT name AS "书名", num AS "库存", CASE 
	WHEN num > 30 THEN
		'滞销'
	WHEN num > 0 AND num < 10 THEN
		'畅销'
	WHEN num = 0 THEN
		'无货'
	ELSE
		'正常'
END "显示状态"
FROM books;

18、统计每一种note的库存量,并合计总量

SELECT IFNULL(note,'合计库存总量'), SUM(num)
FROM books
GROUP BY note WITH ROLLUP;

19、统计每一种note的数量,并合计总量

SELECT IFNULL(note,'合计总量'), COUNT(*)
FROM books
GROUP BY note WITH ROLLUP;

20、统计库存量前三名的图书

SELECT *
FROM books
ORDER BY num DESC
LIMIT 0,3

21、找出最早出版的一本书

SELECT *
FROM books;

SELECT *
FROM books
ORDER BY pubdate ASC
LIMIT 0,1;

22、找出novel中价格最高的一本书

SELECT *
FROM books
ORDER BY price DESC
LIMIT 0,1;

23、找出书名中字数最多的一本书,不含空格

SELECT *
FROM books
ORDER BY CHAR_LENGTH(REPLACE(name, ' ','')) DESC
LIMIT 0,1;

总结:

对于表的创建以及管理

表的创建
CREATE TABLE IF NOT EXISTS 表名(
字段名 数据类型
);

表的修改
①添加字段
ALTER TABLE 表名
ADD 字段名 数据类型;

②修改字段的数据长度,类型、默认值
ALTER TABLE 表名
MODIFY 字段名 数据类型 DEFAULT ‘’;

③重命名字段
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 数据类型 长度;

④删除字段
ALTER TABLE 表名
DROP COLUMN 字段名

⑤重命名表
RENAME TABLE 旧表名
TO 新表名

⑤删除表
DROP TABLE IF EXISTS 表名

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮皮皮皮皮皮卡乒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值