Mysql基础篇(创建、管理、增删改表)-2

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: Mysql基础篇(创建、管理、增删改表)

Mysql基础篇(创建、管理、增删改表)-1

https://developer.aliyun.com/article/1425784


数据处理之增删改


插入数据

VALUES的方式添加

情况1:为表的所有字段按默认顺序插入数据

不指定字段名,按照默认字段的默认顺序进行添加

INSERT INTO 表名 VALUES (value1,value2,....);
INSERT INTO departments VALUES (70, 'Pub', 100, 1700);
情况2:为表的指定字段插入数据
INSERT INTO 表名(column1 [, column2, …, columnn]) VALUES (value1 [,value2, …, valuen]);
INSERT INTO departments(department_id, department_name) VALUES (80, 'IT')
情况3:同时插入多条记录
INSERT INTO table_name
VALUES
(value1 [,value2, …, valuen]),
(value1 [,value2, …, valuen]),
……
(value1 [,value2, …, valuen]);
或者如下:
INSERT INTO table_name(column1 [, column2, …, columnn])
VALUES
(value1 [,value2, …, valuen]),
(value1 [,value2, …, valuen]),
……
(value1 [,value2, …, valuen]);
示例如下:
mysql> INSERT INTO emp(emp_id,emp_name)
-> VALUES (1001,'shkstart'),
-> (1002,'atguigu'),
-> (1003,'Tom');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

使用INSERT同时插入多条记录时,MySQL会返回一些在执行单行插入时没有的额外信息,这些信息的含 义如下:


  • Records:表明插入的记录条数。
  • Duplicates:表明插入时被忽略的记录,原因可能是这 些记录包含了重复的主键值。
  • Warnings:表明有问题的数据值,例如发生数据类型转换。


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

小结
  • VALUES 也可以写成 VALUE ,但是VALUES是标准写法。
  • 字符和日期型数据应包含在单引号中。


将查询结果插入到表中

INSERT INTO 目标表名
(tar_column1 [, tar_column2, …, tar_columnn])
SELECT
(src_column1 [, src_column2, …, src_columnn])
FROM 源表名
[WHERE condition]


  • 在 INSERT 语句中加入子查询。
  • 不必书写 VALUES 子句。
  • 子查询中的值列表应与 INSERT 子句中的列名对应。


例子:

INSERT INTO dept80 (
  employee_id,
  last_name,
  ANNSAL,
  hire_date 
)
SELECT 
  employee_id,
  last_name,
  ANNSAL,
  hire_date
FROM
  dept100;  

更新数据

UPDATE table_name SET column1=value1, column2=value2, … , column=valuen [WHERE condition]
  • 可以一次更新多条数据。
  • 如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;
  • 使用 WHERE 子句指定需要更新的数据。
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
  • 如果省略 WHERE 子句,则表中的所有数据都将被更新


删除数据

使用 DELETE 语句从表中删除数据

DELETE FROM table_name [WHERE <condition>];


使用 WHERE 子句删除指定的记录

DELETE FROM departments
WHERE department_name = 'Finance';

如果省略 WHERE 子句,则表中的全部数据将被删除


MySQL8新特性:计算列


什么叫计算列呢?简单来说就是某一列的值是通过别的列计算得来的。

例如,a列值为1、b列值为2,c列 不需要手动插入,定义a+b的结果为c的值,那么c就是计算列,是通过别的列计算得来的。

在MySQL 8.0中,CREATE TABLE 和 ALTER TABLE 中都支持增加计算列。

CREATE TABLE tb1(
id INT,
a INT,
b INT,
c INT GENERATED ALWAYS AS (a + b) VIRTUAL
);
INSERT INTO tb1(a,b) VALUES (100,200);
mysql> SELECT * FROM tb1;
+------+------+------+------+
| id | a | b | c |
+------+------+------+------+
| NULL | 100 | 200 | 300 |
+------+------+------+------+
1 row in set (0.00 sec)

练习

当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。

而在groupby后面还可以加入withcube和withrollup等关键字对数据进行汇总


建表加数据

CREATE TABLE books (
  id INT,
  NAME VARCHAR ( 50 ),
  AUTHORS VARCHAR ( 100 ),
  price FLOAT,
  pubdate YEAR,
  note VARCHAR ( 100 ),
  num INT 
)
INSERT INTO books ( id, NAME, `authors`, 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 );

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

CHAR_LENGTH(str) 返回以字符来测量字符串str的长度。

REPLACE ()三个参数,第一个为字段,第二个为被替换的字符,第三个为替换的字符

update article set name=replace(name,’ ‘,’');


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

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

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

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

SELECT NAME AS
  "书名",
  note,
CASE
    note 
    WHEN 'novel' THEN
    '小说' 
    WHEN 'law' THEN
    '法律' 
    WHEN 'medicine' THEN
    '卡通' 
  END '类型' 
FROM
  books;

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

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

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

当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。而在groupby后面还可以加入withcube和withrollup等关键字对数据进行汇总。

IFNULL 函数是MySQL控制流函数之一,它接受两个参数,如果不是 NULL ,则返回第一个参数。. 否则, IFNULL 函数返回第二个参数。

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

对WITH ROLLUP的理解:

不加如下:

加了:

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
13天前
|
安全 关系型数据库 MySQL
《MySQL 简易速速上手小册》第4章:数据安全性管理(2024 最新版)
《MySQL 简易速速上手小册》第4章:数据安全性管理(2024 最新版)
32 3
|
9天前
|
运维 监控 安全
云HIS医疗管理系统源码——技术栈【SpringBoot+Angular+MySQL+MyBatis】
云HIS系统采用主流成熟技术,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问前后端分离,多服务协同,服务可拆分,功能易扩展;支持多样化灵活配置,提取大量公共参数,无需修改代码即可满足不同客户需求;服务组织合理,功能高内聚,服务间通信简练。
26 4
|
2天前
|
存储 SQL 关系型数据库
mysql查询数据库表大小怎么操作
mysql查询数据库表大小怎么操作
|
2天前
|
运维 DataWorks 关系型数据库
DataWorks产品使用合集之DataWorks还有就是对于mysql中的表已经存在数据了,第一次全量后面增量同步的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
16 2
|
3天前
|
关系型数据库 MySQL 数据库
【MySQL】:数据库事务管理
【MySQL】:数据库事务管理
16 0
|
3天前
|
存储 SQL 关系型数据库
MySQL表的增删改查---多表查询和联合查询
MySQL表的增删改查---多表查询和联合查询
|
4天前
|
安全 关系型数据库 MySQL
|
6天前
|
存储 关系型数据库 MySQL
{MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询
{MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询
15 0
|
7天前
|
存储 关系型数据库 MySQL
|
15天前
|
关系型数据库 MySQL
MySQL 实例employee表综合查询
MySQL 实例employee表综合查询