吾与数据库之爱恨情仇 第一章

第一回 子查询

1.非关联子查询
如果子查询只执行一次,然后子查询的结果集会作为外部查询的条件进行判断,那么这样的子查询叫做非关联子查询。
标量子查询:查询单个记录的单个字段
矢量子查询:查询整个字段

2.关联子查询
如果子查询依赖于外部查询,通常情况下是因为子查询用到了外部查询的某些字段。 因此,每执行一次外部查询,子查询都要重新执行一次,这样的子查询叫做关联子查询。

3. Exists
关联子查询可能会搭配 `EXISTS` 关键字一起使用。`EXISTS` 用来判断子查询的结果集是否为空集。如果不为空集返回True,如果为空集返回 False。

4. 集合比较子查询 
in:存在于为真
some(any):集合中存在满足于判断条件元素为真
all:集合中任意均满足判断条件为真

5.子查询作为计算字段存在
# 举个例子:查询每个球队的名称,和它们的球员数。
select team_id, team_name, (
	select count(*) from player where player.team_id = team.team_id
) as 'team_nums' from team;

select team_id, team_name, team_nums
from team left join (
	select team_id, count(*) as team_nums 
	from player group by team_id
) as t using(team_id);

第二回 事务

1. 事务的基本操作 
开启事务
start transaction; 
begin ;
MySQL默认开启了自动提交,每条SQL语句都会被当成一个事务执行。
set @@autocommit=0; 相当于开启事务 
提交事务 
commit;
设置回滚点 
savepoint sp;
删除回滚点 
release savepoint sp;
回滚事务 
rollback ;  回滚到事务开启前的状态 
rollback to sp;  回滚到回滚点 
事务正确执行的四要素
原子性(atomicity),一致性(consistency),隔离性(isolation)和持久性(durability)。
不同的隔离级别分别解决了哪些问题?
脏写脏读不可重复读幻读
read uncommittedNYYY
read committedNNYY
repeatable readNNNY
serializableNNNN
select @@tx_isolation; 查看会话的隔离级别 
select @@session.tx_isolation;  查看会话的隔离级别 
select @@global.tx_isolation;  查看系统的级别 
MySQL默认的隔离级别 Repeatable Read
set transaction isolation level read uncommitted;  设置下一个事务的隔离级别
set session transaction isolation level read uncommitted;  设置会话的隔离级别 
set global transaction isolation level serializable; 设置系统的隔离级别 
注意事项:
a. MySQL实现了4中隔离级别, 默认隔离级别是RR
b. MySQL RR隔离级别实现比较特殊,能够在大多数情况下避免幻读现象出现.
c. Oracle只实现read committed, serializable两种隔离级别,默认隔离级别是read committed.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值