数据库概念

来源:互联网 发布:上海紫越网络好吗 编辑:程序博客网 时间:2024/06/08 05:49

数据库事务的acid属性:

1.原子性(atomicity):指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

2.一致性(consistency):事务必须是数据库从一个一致性状态转到另一个一致性状态,如a、b账户分别有100块,a给b汇款50块,一致性必须保证a账户剩50块,b账户有150块。

3.隔离性(isolation):一个事务的执行不能被其他事务干扰。

4持久性(durability):事务一旦提交,数据就被永久改变。

要保证事务的acid属性,必须使事务中的所有操作处于同一个connection中。


数据库的并发问题:

1.脏读:两个事务a和b,a读取了被b更新但还没提交的字段,若b回滚,则a读取的数据是无效的。

2.不可重复读:两个事务a和b,a先读取了一个字段,然后b更新了该字段,接着a再读该字段,值不同了。

3.幻读:两个事务a和b,a先读取了一个字段,然后b在该表中插入了几行记录,之后如果a再读该字段,就会多出几行。

注意:不可重复读和幻读是正常情况,需要避免的是脏读。


数据库的隔离级别:

1.读未提交:允许事务读取未被其他事务提交的变更。脏读,不可重复读,幻读都可能出现。(并发性最高,数据一致性最弱)

2.读已提交:只允许事务读取已经被其他事务提交的变更,可避免脏读,但不可重复读,幻读可能出现。(推荐使用)

3.可重复读:确保事务可以多次从同一个字段读取相同的值,在此事务期间,禁止其他事务更新该字段。可避免脏读和不可重复读,仍可能出现幻读。(并发性很弱,一致性很强)

4.串行化:确保事务可以从一个表中读取相同的行,在此事务期间,禁止其他事务对该表进行插入,更新和删除操作。可避免所有并发问题。(并发性最低,数据一致性最强)

MySQL支持四种隔离级别,默认是可重复读。


在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:



内连接:
内连接相当于普通的查询,只是语法稍有不同;比如普通查询select * from ta a, tb b where a.id=b.id
内连接写成select * from ta a inner join tb b on a.id=b.id

左连接(也即左外连接):以左表的记录为准,显示左表的所有记录。对于左表的每一条记录,同时列出右表中满足条件的记录,如果右表中没有满足条件的记录,则不显示。举例:
表t1:  idname                表t2:         idscore
             1          bob     1           88
     2          luna
     3          pig

select * from t1 left outer join t2 on t1.id=t2.id,结果得到

id     name                idscore
1          bob      1           88
2          luna
3          pig

右连接同理。

原创粉丝点击