1.关于几个常用的连接查询的小结
left join,right join,inner join full outer join,union,union all
left join(左连接) ——返回以左表为主的数据 右表中显示符合条件的数据 不符合的置为空
right join(右联接)——返回以右表为主的数据 左表中显示符合条件的数据 不符合的置为空
inner join(等值连接)—— 返回两个表中符合条件的数据full join (全连接) —— 返回两个表中所有的数据 不符合的数据置为空
union操作符用于合并两个或多个select语句的结果集
注意,union内部的select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条select中的列顺序也必须相同,union只选取记录,而union all会列出所有记录
2. MySQL的存储引擎 myiasm 和innodb的区别
- InnoDB支持事物,而MyISAM不支持事物
- InnoDB支持行级锁,而MyISAM支持表级锁
- InnoDB支持MVCC, 而MyISAM不支持
- InnoDB支持外键,而MyISAM不支持
- InnoDB不支持全文索引,而MyISAM支持。
3.什么事务
是对数据库操作的最小单位 要么全部提交 要么全部不提交
4.事务的并发问题
1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。(update)
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。(insert)
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
5.事务的隔离级别 解决并发问题
Read uncommitted (读未提交):最低级别,任何情况都无法保证。
第一隔离级别怕回滚,因为它能读取到别的事务未提交的数据。如果当前事务将这个数据当成真正的数据,那么如果别的事务回滚,那么就会数据错误,导致脏读。
Read committed (读已提交):可避免脏读的发生。
第二个隔离级别怕提交,因为提交会导致不可重复读。
Repeatable read (可重复读):可避免脏读、不可重复读的发生。*MySQL默认隔离级别
Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
6.事务的四大特性是什么
atom 原子性 要么全部成功,要么全部失败
consistency 一致性 事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态(需进一步理解)
isolation 隔离型 事务对数据的修改其它事务不可见,事务与事务之间互不干扰
durability 持久性 事务提交完成之后,数据永久保存在磁盘中,不会因服务器宕机而丢失。
7.事务的四大特性是靠什么保证的
1.原子性
原子性是基于undolog来实现的。整个语句要么执行,要么不执行。一个原子性的事务 如果中间失败了,那么前面已经