济南网站建设行知科技不错a,宁波网络公司招聘信息,杭州盘石做网站专业吗,图片转文章转wordpress1.多表查询的分类
1.1 内连接 在 MySQL 中#xff0c;内连接#xff08;INNER JOIN#xff09;返回的是两个表中满足连接条件的记录的交集。这个“交集”不是指整个表#xff0c;而是指符合连接条件的行组合#xff0c;也就是A表和B表中满足我们使用on指定条件的记录。图…1.多表查询的分类
1.1 内连接 在 MySQL 中内连接INNER JOIN返回的是两个表中满足连接条件的记录的交集。这个“交集”不是指整个表而是指符合连接条件的行组合也就是A表和B表中满足我们使用on指定条件的记录。图中绿色部分 1.1.1 隐式内连接 select 字段列表 from 表1 表1别名 , 表2 表2别名 where 条件; 如果我们给表指定了别名那么就不能使用原表明指定条件只能使用别名。
1.1.2 显式内连接 select 字段列表 from 表1 inner join 表2 on 连接条件; 1.2 左外连接 顾名思义左外连接的结果包含左表中的所有数据也包括右表中满足条件的数据图中的蓝色和绿色部分右表记录不足的地方会填充为null 语句select 字段列表 from 表名1 [别名] left [outer] join 表名2 [别名] on 连接条件; 1.3 右连接 右外连接的结果和左外连接相反它包括右表中的所有数据和左表中满足条件的数据图中的绿色和黄色部分左表中不足的数据也会被填充为null 语句select 字段列表 from 表名1 [别名] right [outer] join 表名2 [别名] on 连接条件; 左外连接和右外连接可以相互转换只需要调换表明出现的位置即可
select 字段列表 from 表名1 [别名] right [outer] join 表名2 [别名] on 连接条件;
和下面的语句相同
select 字段列表 from 表名2 [别名] left [outer] join 表名1 [别名] on 连接条件; 1.4 自连接 自连接就是做连接查询的表是同一个此时必须给表取别名区分
select 字段列表 from 表名1 [别名1] right [outer] join 表名1 [别名2] on 连接条件;
自连接可以是内连接左连接和右连接 1.5 联合查询 用法select语句1 union [all] select语句2
添加 all 相当于把两次查询的结果直接组合起来如果有记录满足两个select语句的条件那么它会出现两次如果不添加 all 则会去重相同的记录只出现一次。 两次查询的字段数和字段类型都必须相同否则会报错。 1.6 子查询 1.6.1 标量子查询 标量子查询是指子查询的返回值只有一个值使用的操作符通常是 , , 1.6.2 列子查询 如果是查询任意一人那么可以any和some它们的效果是一样的 1.6.3 行子查询 1.6.4 表子查询 表子查询的返回值是多行多列可以出现在from后我们可以把他理解成一个虚拟表我们从这个虚拟表中查询数据也可以出现在where后此时我们使用in查询满足条件的记录 2.事务
2.1 事务简介 事务是一组操作的集合这组操作必须全部成功或者全部失败。比如银行转账的步骤A账户扣钱B账户加钱 这两步操作必须全部成功或者失败不能单独某一步成功或失败。
2.2 通过autocommit实现事务 -- 查询事务是否自动提交 1自动提交 0手动提交
select autocommit;-- 设置事务为手动提交
set autocommit 0;update student set name333 where id1;delete; -- 模拟程序运行错误update student set name444 where id2;-- 提交事务在整体流程完成后
commit;-- 回滚事务在流程出错后必须执行
rollback;2.3 通过 begin 或 start transaction
start transaction ; -- 也可以是 begin
update student set name333 where id1;
delete; -- 模拟程序运行错误
update student set name444 where id2;-- 提交事务在整体流程完成后
commit;-- 回滚事务在流程出错后必须执行
rollback;2.4 事务的四大特性
2.4.1 原子性 原子性的意思是事务是不可分割的最小单元要么全部成功要么全部失败
2.4.2 一致性 事务完成时必须使所有的数据保持一致
2.4.3 隔离性 数据库系统提供的隔离机制保证事务在不受外部并发操作的影响下执行。
2.4.4 持久性 事务在提交后对数据库的影响是永久的 2.5 并发事务的问题(脏读幻读不可重复读) 2.6 事务隔离的级别 read uncommitted的意思是 读未提交此时事务可以读取到另一并发事务未提交的内容所以会出现脏读幻读不可重复读得问题
read committed意思是 读已提交顾名思义只能读取并发事务已经提交的数据也就解决了脏读的问题但幻读和不可重复读问题依旧存在
repeatable read意思是 重复读 在read committed的基础上解决了不可重复读的问题也是mysql默认的事务隔离级别。
serializable意思是串行化的也就是直接禁止了事务的并发执行让事务串行执行也就解决了所有的问题但是效率比较低。