数据库-杂

数据库的四大特点:

        ①整体数据结构化:

        数据库中的数据是公共的,不属于任何一个应用,结构是全面的。在数据库中,数据文件的个数是有限的,固定的,但数据库系统的应用却是无限制的。
        整体数据的结构化可以减少乃至消除不必要的数据冗余,节约了存储空间,避免了数据的不一致性和不相容性。

        ②数据的共享度高、冗余度低、易扩展:

        数据可以被多个用户、多个应用共享使用。        
        数据与数据的逻辑结构同时存储在数据库中了,可以方便的扩充新的应用。用户也可以方便的使用数据库中的数据。

        ③数据的独立性高:

        数据的独立性指数据与应用程序之间的关联性,包括物理独立性和逻辑独立性。
        物理独立性是指数据在磁盘上的存储是由DBMS管理的,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样一来当数据的物理存储结构改变时,用户的程序不用改变。
        逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,也就是说,数据的逻辑结构改变了,用户程序也可以不改变。        
        数据与程序的独立,把数据的定义从程序中分离出去,加上存取数据的由DBMS负责提供,从而简化了应用程序的编制,大大减少了应用程序的维护和修改;

        ④高度的数据控制能力,即数据由DBMS统一管理和控制:

        具有较高的安全性、较好的数据完整性、较强的并发控制能力和较强的数据恢复能力。

事务的特性:

        ①原子性:事务的所有操作不可分割,要么完成全部操作,要么一个操作也没做,不存在一部分操作做了但另一部分操作没做。
        ②一致性:几个并发执行的事务,其结果与这几个事务串行执行的结果一致。
        ③隔离性:一个事务的执行不会受到其他事务的干扰,事务执行的中间结果对其他事务是透明的。
        ④持久性:已提交的事务对数据库的改变不会丢失。

数据库并发导致的问题:

        丢失修改:两个事务同时对一个数据进行修改,后一个修改覆盖了前一个修改。明明修改过两次,但最终数据的结果只是对原数据进行后一个修改就是丢失修改。
        脏读:读取了未提交的数据。
        不可重复读:多次读取一个数据时由于数据被修改导致读取的结果不同。
        幻读:幻读与不可重复读类似,但不可重复度针对一个数据,幻读针对多个有一定规律的数据,在多次读取数据期间突然增加或者减少了数据导致读取到的数据不一致。这里的不一致多指多出了数据或减少了数据。
        不可重复读可通过行锁、幻读可通过表锁来避免。

数据库四种隔离级别:

        读未提交:即一个事务可以读取另一个事务未提交的数据。这是并发最高,一致性最差的隔离级别。不可解决并发导致的问题。
        读已提交:只能读取到已经被提交的内容,可避免脏读(即读取到未提交的数据)。是SQL Server和Oracle的默认隔离级别
        可重复读:当事务在读取数据时,该数据不允许被修改。可避免脏读、不可重复读。是Mysql的默认隔离级别
        可串行化:让事务串行化进行,一个事务完成另一个事务才开始。可避免脏读、不可重复读、幻读,但是效率极低。是数据库最高的隔离级别。

锁:

各种常见的锁:

        行锁:对表中的某一行上锁,上锁后其他事务不可对这一行进行修改。
        表锁:对某个表上锁,上锁后其他事务不可对该表的内容进行修改。
        读锁:即共享锁、S锁(share),事务A对对象B加S锁后,其他事务只能对对象B加S锁(只读),直到所有事务都释放该共享锁才能对对象B加其他锁。
        写锁:即互斥锁、X锁(mutex),事务A对对象B加X锁后,其他事务不能对对象B加锁,直到事务A释放互斥锁。

死锁条件:

        ①互斥条件:一个资源只能由一个进程持有,在持有期间其他进程想要该资源只能等待。
        ②请求与保持条件:指一个进程在已有资源的情况下请求一个被其他进程持有的资源时,并不会释放自己所有的资源,而是保持等待直到获得所有请求的资源。
        ③不剥夺条件:一个进程持有的资源只能由进程释放,不可被剥夺。
        ④环路等待条件:在发生死锁时,必然存在一个进程—资源的环形链,即进程A想要B的资源,B想要C的资源,C想要A的资源。各个进程无法完成便无法释放资源,无法释放资源又导致进程进入等待无法完成。

银行家算法:

        银行家算法实质就是设法保证系统动态分配资源后不会进入不安全状态,以避免可能产生的死锁。

        需要要求进程预先提出自己的最大资源请求,假设系统拥有固定的资源总量且进程结束后资源能全部由系统回收。
        当进程提出资源请求且系统的资源能够满足该请求时,系统将判断满足此次资源请求后系统状态是否安全,如果判断结果为安全,则给该进程分配资源,否则不分配资源,申请资源的进程将阻塞。当系统资源不能满足该请求,申请资源的进程也会被阻塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值