冒险岛2锻造熟练度:sql恢复子系统设计问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/09 06:06:12
书上248页说:“一个事务一旦提交,它对数据库中数据的改变就是永久性的”
这段话是说,如果事务一旦提交,那么数据库有要相应地改变,对吗?
P250:“另一方面,发生系统故障时,有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中。”这段话是说,事务提交后一般先是留在缓冲区中,而不是直接写回到磁盘的物理数据库中,对吗?那么,事务在缓冲区中的时候,它是不改变数据库的吧?那么,当我有这样一个操作:当我对数据库有个插入操作时,程序界面要即时返回。就是当我插入一个无组时,程序界面要即时显示更新的数据库。但是按照上面的说法,当我插入无组时,这个事务是在缓冲区的,并没有直接改变物理数据库。这么说来,程序返回的不是没有更新前的数据吗?我新插入的元组不是不能显示出来吗?这个怎么解释呢?

一个事务没有提交的时候,是保留在SQL的缓冲区中,一但提交就是写到磁盘上了。但是从事务开始的时候,你就锁定了数据表。

过程是这样的,你建立事务,事务启动,锁定表(其它人访问不了,这时你写的数据在缓冲区,你对应的数据是缓冲中的数据),提交事务,写回磁盘,表解锁。

再告诉一段话,如果数据库的日志是完整性的,你写到数据库中的数据也可以恢复。