目录
1.课程介绍
数据库:DataBase (DB),是存储和管理数据的仓库。
数据库管理系统:DataBase Management System (DBMS),操纵和管理数据库的大型软件。
SQL: Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
数据库产品:
学习路线:
2.概述
2.1安装配置
官网下载地址: https://dev.mysql.com/downloads/mysql/
安装步骤,参考资料中提供的《MySQL安装文档》
MySQL连接语法:mysql -u用户名 -p密码[ -h数据库服务器IP地址-P端口号]
MySQL企业开发使用方式:我们可以在VMware上安装MySQL,让虚拟机充当服务器,连接上虚拟机上的数据库并操作。
2.2数据模型&SQL简介
关系型数据库(RDBMS):建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
特点:1.使用表存储数据,格式统一,便于维护
2.使用SQL语言操作,标准统一,使用方便,可用于复杂查询
SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
通用语法:
①SQL语句可以单行或多行书写,以分号结尾。
②SQL语句可以使用空格/缩进来增强语句的可读性。
③MySQL数据库的SQL语句不区分大小写。
注释:1.单行注释:-- 注释内容或#注释内容(MySQL特有) 2.多行注释:/*注释内容*/
3.DDL(数据定义语言,定义数据库对象)
3.1数据库操作
DDL英文全称是Data Definition Language,数据定义语言,用来定义数据库对象(数据库、表)。
3.2图形化工具
由于在命令行操作无提示信息,操作繁琐,无历史记录,所以使用图形化工具
3.3表结构操作
3.3.1创建
3.3.2数据类型
3.3.3创建案例
3.3.4查询&修改&删除
4.DML(数据操作语言,增删改数据库表中的数据)
4.1添加数据insert
4.2修改数据update
4.3删除数据delete
5.DQL(数据查询语言,查询数据库表中的记录)
DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。
关键字:SELECT
5.1基本查询
5.2条件查询
5.3聚合函数
5.4分组查询
5.5排序查询
5.6分页查询
5.7案例
6.多表设计
6.1一对多
6.2一对多外键
多表问题分析
现象:部门数据可以直接删除,然而还有部分员工归属于该部门下,此时就出现了数据的不完整、不一致问题。
问题分析:目前上述的两张表,在数据库层面,并未建立关联,所以是无法保证数据的一致性和完整性的。(使用外键)
6.3一对一&多对多
6.4案例--关系分析与表结构
7.多表查询
7.1概述
7.2内连接
7.3外连接
7.4子查询
概述:
- 介绍:SQL语句中嵌套select语句,称为嵌套查询,又称子查询。
- 形式: select * from t1 where column1 = ( select column1 from t2 ...);
- 子查询外部的语句可以是insert / update / delete / select的任何一个,最常见的是select
分类:
- 标量子查询:子查询返回的结果为单个值
- 列子查询:子查询返回的结果为一列
- 行子查询:子查询返回的结果为一行
- 表子查询:子查询返回的结果为多行多列
①标量、列子查询
②行、表子查询
7.5案例
1.查询价格低于10元的菜品的名称、价格及其菜品的分类名称
select d.name, price, c.name
from dish d
join category c on d.category_id = c.id
where price < 10;
2.查询所有价格在10元(含)到50元(含)之间且状态为"起售"的菜品名称、价格及其分类名称
select d.name, d.price, c.name
from dish d
left join category c on d.category_id = c.id
where (price between 10 and 50)
and d.status = 1;
3.查询每个分类下最贵的菜品,展示出分类的名称、最贵的菜品的价格.
select c.name, max(d.price)
from dish d
join category c on d.category_id = c.id
group by c.name;
4.查询各个分类下菜品状态为"起售",并且该分类下菜品总数量大于等于3的分类名称
select c.name,count(d.id)
from dish d
join category c on c.id = d.category_id
where d.status = 1
group by c.name
having count(d.id) >= 3;
5.查询出"商务套餐A"中包含了哪些菜品(展示出套餐名称、价格,包含的菜品名称、价格份数)
select s.name, s.price, d.name, d.price, sd.copies
from dish d
join setmeal_dish sd
join setmeal s on d.id = sd.dish_id
and sd.setmeal_id = s.id
where s.name = '商务套餐A';
6.查询出低于菜品平均价格的菜品信息(展示出菜品名称、菜品价格)
select d.name,d.price from dish d where d.price < (select avg(d.price) from dish d)
8.事务
8.1介绍与操作
概念
- 事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
注意事项
- 默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。所以才会导致上面出现数据不一致的效果。
所以我们需要进行事务控制,把一组操作变成一个事务。
在一组操作之前需要开启事务,再选中SQL语句执行事务操作,如果没有提交事务,在表中可以看到数据是不会真正删除的,窗口之间是相互隔离的,但是在执行事务窗口中查询是可以看到数据已经发生了变化。只有提交了事务才能真正的进行修改。
如果一个事务的有操作发生了错误,正确操作已经执行错误操作还未执行,导致数据不一致,可以使用rollback回滚事务,使得数据变会原来的样子。
8.2四大特性
四大特性(ACID):
- 原子性Atomicity:事务是不可分割的最小单元,要么全部成功,要么全部失败
- 一致性Consistency:事务完成时,必须使所有的数据都保持—致状态
- 隔离性lsolation:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
- 持久性Durability:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
9.索引
9.1介绍
概念:索引( index)是帮助数据库高效获取数据的数据结构。
优点:
- 提高数据查询的效率,降低数据库的lo成本。
- 通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
缺点:
- 索引会占用存储空间。
- 索引大大提高了查询效率,同时却也降低了insert、update. delete的效率
9.2结构
9.3操作语法