MySQL第一阶段:多表查询、事务

继续我的MySQL之旅,继续上篇的DDL、DML、DQL、以及一些约束,该到了多表查询和事务的学习总结,以及相关的案例实现,为未来的复习以及深入的理解做好知识储备。

目录

多表查询

连接查询

内连接

外连接

子查询

事务

事务简介

事务操作

事务四大特征


多表查询

多表查询分为连接查询和子查询

连接查询

连接查询分为内连接与外连接

内连接

MySQL里把inner join 称为等值连接,就是需要指定出来等值的连接条件inner join划分在一起

  • 必须有等值条件;
  • 内连接可能会丢失信息;(内连接是从结果表中删除与其他被连接表中没有匹配行的所有行)
  • 重点:内连接,只会查询出来匹配行。
sql 复制代码
// 第一种只包含where    隐式内连接
select 字段列表 from 表1,表2... where 条件;
// 第二种:join...on
SELECT * FROM table1 a JOIN table2 b on a.id=b.id;
// 显式内连接  inner join ......on
SELECT * FROM table1 a inner join table2 b on a.id=b.id;
sql 复制代码
-- 多表查询
-- 笛卡尔积
SELECT
	tb_goods.id,
	tb_order.id,
	tb_goods.title,
	tb_goods.price 
FROM
	tb_goods
	CROSS JOIN tb_order;-- 连接查询--内连接
-- 隐式内连接     相当于查询两个集合的交集
-- select 字段列表 from 表1,表2...... where 条件;
SELECT
	tb_goods.id,
	tb_order.id,
	tb_goods.title,
	tb_goods.price 
FROM
	tb_goods
	CROSS JOIN tb_order 
WHERE
	tb_goods.id = tb_order.id;-- 显示内连接
-- select 字段列表 from 表1 [INNER] join 表2 on 条件
SELECT
	* 
FROM
	tb_goods a
	INNER JOIN tb_order b ON a.id = b.id;

外连接

  1. 左外连接 left inner join

左边为主表,左边所有数据都显示,右边显示相关联,剩余的显示不关联的 null

sql 复制代码
-- 外连接
-- 左外连接
select * from tb_goods a left join tb_order b on a.id = b.id;

右外连接,right inner join

右边为主表右边所有数据都显示,左边显示相关联,剩余的显示不关联的 null

sql 复制代码
-- 右外连接
SELECT * from tb_goods a right join tb_order b on a.id = b.id;

子查询

概念 :

查询中嵌套查询,称嵌套查询为子查询

子查询根据查询结果不同,作用不同:

单行单列、多行单列、多行多列几类

实质:

查询之中嵌套着一个查询,这个嵌套进去的查询

事务

数据库中的一种特性

事务简介

数据库的事务是一种机制、一个操作序列,包含了一组数据库操作命令

事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败

事务是一个不可分割的工作逻辑单元

python 中事务的提交不是自动的,MySQL 的事务是自动提交的

事务操作

一共三个操作

复制代码
-- 开启事务
start transaction;
// 或者   begin
-- 提交事务
commit;
-- 回滚事务
rollback;

事务四大特征

A C I D四大特性

原子性(Atomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败

一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态

隔离性(lsolation):多个事务之间,操作的可见性,多个事件的独立性

持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

复制代码
-- 1.查询事务的默认提交方式,默认值为1自动提交,手动为0
select @@autocommit;
-- 2.修改事务的提交方式为手动提交,则执行下方修改代码后不会提交,即是不存在永久改变
set @@autocommit = 0;
-- 3.李四金额-500
update account set money = money - 500 where name = '李四';
相关推荐
+VX:Fegn08955 分钟前
计算机毕业设计|基于springboot + vue在线考试管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
DreamNotOver11 分钟前
使用 Django 测试脚本验证用户角色与权限:自动化测试用户仪表盘访
数据库·mysql·django·sqlite
萝卜青今天也要开心15 分钟前
2025年下半年系统架构设计师考后分享
java·数据库·redis·笔记·学习·系统架构
子夜江寒16 分钟前
MySQL 安装与配置指南(CentOS 7)
数据库·mysql·centos
DemonAvenger32 分钟前
Redis集群架构详解:从单机到分布式的扩展之路
数据库·redis·性能优化
CHANG_THE_WORLD40 分钟前
Python 文件操作详解与代码示例
开发语言·数据库·python
TT哇41 分钟前
关闭外键约束检查
数据库·sql·oracle
卿雪42 分钟前
Redis 数据持久化:RDB和 AOF 有什么区别?
java·数据库·redis·python·mysql·缓存·golang
计算机毕设MTU77571 小时前
999+套计算机毕业设计——基于HTML5+CSS的图书馆借阅管理系统的设计与实现(含源码+部署教程+数据库)
数据库·spring boot·课程设计·借阅管理系统·图书馆
2501_916766541 小时前
MySQL 数据库与 SQL 语言介绍
数据库·sql·mysql