Mysql

一、查询

#内连接:查询满足条件的两个表所有字段
select * from t_role inner join t_user on t_user.id = t_role.id

#左查询:左表显示全部记录,右表只会显示满足条件的记录,不满足显示Null
select * from t_role left join t_user on t_user.id = t_role.id

#右查询:右表显示全部记录,左表只会显示满足条件的记录,不满足显示null
select * from t_role right join t_user on t_user.id = t_role.id

#全连接查询:
#显示两个表全部的内容,Oracle可直接full join,mysql需要union连接左查询和右查询
#Oracle:
select * from t_role full join t_user on t_role.id = t_user.id
#Mysql:
select * from t_role left join t_user on t_user.id = t_role.id
union 
select * from t_role right join t_user on t_user.id = t_role.id

#交叉查询,查询结果为笛卡尔积,不常用
select * from t_role cross join t_user

#嵌套查询,DISTINCT去重
select * from t_role where t_role.id > (select COUNT(DISTINCT t_user.id) from t_user) 


# order by 排序
# group by 分组,与聚合函数使用


二、事务

数据库事务ACID:
    1.原子性:Atomicity,事务中的所有操作,要么同时完成,要么同时不完成,事务中一旦出现错误,事务中的所有内容都会回滚到执行前的状态;
    2.一致性:Consistency,针对多个事务并发的情况,保证系统始终处于一致的状态,比如多个事务操纵同一份数据,数据总量500,不论每个事务如何操
    作此数据,其总量500保持一致;
    3.隔离性:Isolation,两个事务之间的隔离程度,用于描述两个事务之间的关系,比如事务A能否在B提交前读取B事务的内容;
    4.持久性:Durability,事务一旦执行完毕,其对数据的改变会永久保存在数据库中;
    
隔离级别:Isolation
    由SQL的标准规范定义,java|spring引用继承此规范
    在TransactionDefination中定义ISOLATION_DEFAULT,默认隔离级别沿用所使用的数据默认隔离级别,mysql支持四种隔离级别,默认为可重复读,ocacle只支持读/写提交和序列化两种,默认读/写提交;经常使用的隔离级别:读/写提交。
    1.读未提交(Read uncommitted):脏读:dirty read,事务A能够读取事务B未提交的事务,这样的场景称为脏读;
    2.读/写提交(Read committed):read commit,事务A只能读取事务B已经提交的数据,会产生不可重复读问题(unrepeatable read);
        不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,导致结果不一致,
        针对update/delete操作,解决可以用锁锁住目标行,锁住之后,不可以update|delete,insert又不造成不可重复读问题,所以解决;
    3.可重复读(Repeatable read):repeatable read,注意是针对数据库的同一条记录,可重复读使同一条数据的读写操作按照序列化进行,解决不可重复读,导致幻读;
        幻读:phantom read,A在T1时刻查询到10条记录,在T4时刻打印10条,B在T2,T3时刻增加一条,最后A打印的结果为11条,多出的一条如同幻觉,称为幻读,幻读针对insert操作,解决用锁锁住表;
    4.序列化(Serializable):Seralizable,注意是针对多条数据库记录,将多条数据库记录按照同一个序列化进行,解决幻读;
以上四种级别,性能依次降低,在高并发事务中,如果选择Serlazibale隔离级别会严重影响性能,因此在并发量不大的情况下,为保证数据的安全性,可以考虑Serlizable,但是在互联网高并发系统中,通常采用读/写提交;

mysql默认的隔离级别为可重复读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值