Mysql数据库基础知识(超详细)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 数据库数据库:DataBase ( DB),是存储和管理数据的仓库。数据库管理系统:DataBase Management System (DBMS),操纵和管理数据库的大型软件。SQL: Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。

数据库

数据库:DataBase ( DB),是存储和管理数据的仓库。

数据库管理系统:DataBase Management System (DBMS),操纵和管理数据库的大型软件。

SQL: Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。


image.png

数据库设计

MySQL概述


image.png

image.png

数据库设计-DDL

9c9daafc93bc46ee8e4b9b2bd26499b1.png

c8542f07e67043c6a933a6088b6264ac.png


image.png

数据库操作

数据库操作-DML


8bf82a43b8b843d6ae9b5dd82384c0e4.png

feb4e2e468c54d44ad5fdace91f25fa2.png

4ea667a141f6485994a3b12c28fffc73.png



image.png

数据库操作-DQL


43618975b81c4d51bd1712dc7229bf0e.png

596e0ab8272c4318857e3c43d9f4f08e.png

c74c0bfe8b1241e7a4cdacaa63e04eed.png

96db7be4dfca41839781ecd29b58ca6e.png




96db7be4dfca41839781ecd29b58ca6e.png



74e8c49d2ca54b70ba8d1d1b6a04b074.png


9b851adfad7f4657b3fdef183fedc705.png

d53b229d453a41cba6c239f81a0fd896.png


多表设计

1.一对多

在多的一方添加外键,关联另外一方的主键。

2.一对一

任意一方,添加外键,关联另外一方的主键。

3.多对多

通过中间表来维护,中间表的两个外键,分别关联另外两张表的主键。


44f287ace5404e0095a576819ff46f95.png


image.png


多表查询

e602dc58792f4ebeb61533b4083861d8.png


内连接

隐式内连接: select 字段列表 from 表1,表2 where 条件…;

显式内连接: select 字段列表 from 表1 [ inner ] join 表2 on 连接条件…;

外连接

左外连接: select 字段列表 from 表1 left [ outer ] join 表2 on 连接条件…;

右外连接: selec t字段列表 from 表1 right [ outer ] join 表2 on 连接条件…;

子查询

介绍:SQL语句中嵌套select语句,称为嵌套查询,又称子查询。

形式: select * from t1 where column1 = ( select column1 from t2 …);

子查询外部的语句可以是insert / update / delete / select的任何一个,最常见的是select

相关查询的练习

-- ============================= 内连接 =============================
-- A. 查询员工的姓名 , 及所属的部门名称 (隐式内连接实现)
SELECT tb_emp.`name`as 姓名,tb_dept.`name` AS 部门 FROM tb_emp,tb_dept WHERE tb_emp.dept_id=tb_dept.id
-- B. 查询员工的姓名 , 及所属的部门名称 (显式内连接实现)
SELECT tb_emp.`name`as 姓名,tb_dept.`name` AS 部门 FROM
tb_emp INNER JOIN tb_dept on tb_emp.dept_id=tb_dept.id
-- =============================== 外连接 ============================
-- A. 查询员工表 所有 员工的姓名, 和对应的部门名称 (左外连接)
SELECT tb_emp.`name` AS 姓名,tb_dept.`name` AS 部门 FROM 
tb_emp LEFT JOIN tb_dept ON tb_emp.dept_id=tb_dept.id
-- B. 查询部门表 所有 部门的名称, 和对应的员工名称 (右外连接)
SELECT tb_emp.`name` AS 姓名,tb_dept.`name` AS 部门 FROM 
tb_emp RIGHT JOIN tb_dept ON tb_emp.dept_id=tb_dept.id
-- ========================= 子查询 ================================
-- 标量子查询
-- A. 查询 "教研部" 的所有员工信息
SELECT * FROM tb_emp WHERE tb_emp.dept_id=(
SELECT tb_dept.id FROM tb_dept WHERE tb_dept.`name`='教研部' )
-- B. 查询在 "方东白" 入职之后的员工信息
SELECT * FROM tb_emp WHERE entrydate>(SELECT entrydate FROM
tb_emp WHERE `name`='方东白'
)
-- 列子查询
-- A. 查询 "教研部" 和 "咨询部" 的所有员工信息
SELECT * FROM tb_emp WHERE dept_id in (SELECT id FROM tb_dept WHERE `name`in ('教研部','咨询部'))
-- 行子查询
-- A. 查询与 "韦一笑" 的入职日期 及 职位都相同的员工信息 ;
SELECT * FROM tb_emp WHERE (entrydate=(SELECT entrydate FROM tb_emp WHERE `name`='韦一笑') and job =(SELECT job FROM tb_emp WHERE  `name`='韦一笑'))
-- 表子查询
-- A. 查询入职日期是 "2006-01-01" 之后的员工信息 , 及其部门信息
SELECT tb_emp.*,tb_dept.* FROM tb_emp LEFT JOIN tb_dept ON tb_emp.dept_id=tb_dept.id
 WHERE tb_emp.entrydate>'2006-01-01' 
-- 1. 查询价格低于 10元 的菜品的名称 、价格 及其 菜品的分类名称 .
SELECT dish.`name`,dish.price ,category.`name` as 分类 FROM dish,category WHERE dish.price<10 AND category.id=dish.category_id
-- 2. 查询所有价格在 10元(含)到50元(含)之间 且 状态为'起售'的菜品名称、价格 及其 菜品的分类名称 (即使菜品没有分类 , 也需要将菜品查询出来).
SELECT dish.`name`,dish.price,category.`name` FROM dish LEFT JOIN category ON category.id=dish.category_id
WHERE price BETWEEN 10 and 50  and dish.`status`=1 
-- 3. 查询每个分类下最贵的菜品, 展示出分类的名称、最贵的菜品的价格 .
SELECT category.`name`,MAX(dish.price) AS 最贵的 FROM dish,category WHERE dish.category_id=category.id GROUP BY category.`name`
-- 4. 查询各个分类下 状态为 '起售' , 并且 该分类下菜品总数量大于等于3 的 分类名称 .
SELECT category.`name`,COUNT(*)FROM dish,category WHERE category.`status`=1 AND dish.category_id=category.id  
GROUP BY category.`name` HAVING count(*)>=3
-- 5. 查询出 "商务套餐A" 中包含了哪些菜品 (展示 出套餐名称、价格, 包含的菜品名称、价格、份数).
SELECT dish.`name`,dish.price ,setmeal_dish.copies,setmeal.`name` ,setmeal.price FROM dish ,setmeal,setmeal_dish WHERE 
 setmeal_dish.dish_id=dish.id and setmeal_dish.setmeal_id=setmeal.id AND setmeal.`name`='商务套餐A' 
-- 6. 查询出低于菜品平均价格的菜品信息 (展示出菜品名称、菜品价格).
SELECT dish.`name`,dish.price FROM dish WHERE dish.price < (SELECT AVG(price) FROM dish)


据库优化

事务

介绍&操作

事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

开启事务: start transaction; / begin ;

提交事务:commit;

回滚事务:rollback;

四大特性


f92e7ded90c84fd18537def64420f187.png

索引

索引(index) 是帮助数据库高效获取数据的数据结构


4f7444db17324b6a9e0a03e7d289e3aa.png


70099584f97c4930bd8a4f9a58bbfdc0.png


0832283d11604fefa42da3c02e7a5e2f.png

964c5de6e8914d798501f98e6b872a46.png

语法

创建索引

create [ unique ] index索引名on表名(字段名,… );

查看索引

show index from表名;

删除索引

drop index索引名 on表名;

主键字段,在建表时,会自动创建主键索引。
添加唯一约束时,数据库实际上会添加唯一索引

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
关系型数据库 MySQL 数据库
掌握MySQL数据库基础知识 同步练习与实训
掌握MySQL数据库基础知识 同步练习与实训。
142 0
|
7月前
|
存储 SQL 关系型数据库
MySQL基础知识
【6月更文挑战第13天】MySQL基础知识
53 7
|
7月前
|
关系型数据库 MySQL Linux
MySQL数据库基础知识
【6月更文挑战第20天】MySQL数据库基础知识。
68 3
|
8月前
|
关系型数据库 MySQL 数据库
MySQL数据表的基础知识
MySQL数据表的基础知识
45 0
|
8月前
|
关系型数据库 MySQL 数据库
MySQL基础知识
MySQL基础知识
59 0
|
8月前
|
关系型数据库 MySQL PHP
MySQL基础知识之【元数据】
MySQL基础知识之【元数据】
93 1
|
8月前
|
SQL 前端开发 关系型数据库
MYSQL基础知识之【复制表】
MYSQL基础知识之【复制表】
91 1
|
8月前
|
SQL 前端开发 关系型数据库
MYSQL基础知识之【修改数据,删除数据】
MYSQL基础知识之【修改数据,删除数据】
79 1
|
8月前
|
存储 关系型数据库 MySQL
MySQL入门:了解数据库基础知识
MySQL入门:了解数据库基础知识
96 0