数据库的四大特性

1、数据库的四大特性

       原子性:事务内包含的所有操作要么全部成功,要么全部失败回滚;实现:日志,将所有的更新操作全部写入日志当中,若因为一些系统奔溃/断电等原因导致事务中的部分更新操作已经执行,部分操作未执行,则通过回溯日志,将操作回滚,使系统保证原子性以及一致性;

       一致性:不管任何时间有少个并发的事务,系统也必须保持一致;

       隔离性:多个并发的事务的操作,在同一时间只能有一个事务执行(及串行的执行);

       持久性:事务正确执行后,事务中对数据的操作不会回滚;

2、数据库四大特性之间的关系?

      数据库的四大特性都是以一致性为核心的,分为数据库外部一致性与数据库内部一致性,其中外部一致性是靠编码来保证的(及在同一个事务内保证操作的完整性,如果有问题则数据库无法解决),内部一致性及事务中的操作要保证一致性:即要么全部执行要么全部不执行,且事务执行过后要永久保存一致性(单个事务的情况下);当等多个事务并发进行的情况下,仅仅保证原子性与持久性是不够的,例如并发事务a与并发事务b同时操作一个数据(同时为记录b加100),正常结果为b记录为+200,但是若在a事务操作此数据时,b事务也对此记录+100,且执行完毕,a事务执行完之后,b记录的值只+100,因为a事务将b事务的结果覆盖了即更新丢失,所以为了保证并发状态下的一致性引入了隔离性,即保证每一个事务看到的数据都是一致的,且多个事务并发执行后的状态与他们执行前的状态是等价的;

3、数据库不做隔离性导致的问题?

      脏读:事务A读取了事务B未提交的数据,假如事务B未正确执行,回滚,则事务A读取到的就是脏数据;

              脏读解决:读已提交------改变锁的位置,锁本来的位置是只要操作完成就释放,现在变成事务执行完成之后才会释放;

      不可重复读:一个事务范围内的俩个相同的查询却得到了不同的结果(原因是查询时其他事务修改提交导致的);

      更新丢失:

                (1)更新丢失:俩个事务同时更新,第二个事务回滚覆盖第一个更新的结果;

                (2)俩次更新:俩个事务同时更新同一个数据,第一个事务跟新成功,第二个更新失败,因为第一个覆盖了第二个的跟新结果;

      幻读:同一个事务的相同的俩次查询的结果不一致(针对于记录个数);

4、幻读与不可重复读的区别?

     幻读针对于记录的个数,而不可重复读针对于记录的内容;

5、隔离性的分类?

     读未提交/脏读/ReadUncommitted:及读取未提交的数据,对于同一数据,一事务写时,禁止其他事务写,但是可读数据库中修改的未提交的数据;是为了解决更新丢失的问题;

     读已提交/不可重复读/ReadCommitted:及只能读取已提交的数据,对于同一数据,一事务写时,禁止其他事务读写(读指的是未提交的数据);为了解决更新丢失、脏读的问题;

     可重复读/RepeatableRead:对于同一数据,一事务写时禁止其他事务读,一事务读是禁止其他事务写;解决不可重复读、脏读、更新丢失的问题;

    序列化读:要求事务序列化执行,事务不能并发执行,只能一个个执行,一事务写时,禁止其他事务读写,一事务读时禁止其他事务读写;(表级锁以及行级锁),解决了不可重复读、脏读、更新丢失、幻读等问题;

6、如何实现隔离性?

     俩种类型的锁,乐观锁、悲观锁;

     悲观锁:当前事物将所有涉及操作的对象全部加锁,操作完之后释放给其他对象使用;

     乐观锁:不同的事务可以看到统一数据的不同的历史版本;如果有俩个事务同时修改了同一个数据,则较晚的事务提交时进行冲突检测;

     乐观锁的实现方式:1、日志的方式;2、在内存中保存同一数据的多个历史版本,通过时间戳来区分;

7、如何设置隔离性?

     (1)配置mysql.ini文件             

      1   #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
      2 [mysqld]
      3 transaction-isolation = REPEATABLE-READ

     (2)use 数据库名;

     (3)select @@tx_isolation;//查看是否设置成功,一般设置完成后需要重启mysql的服务;

8、SQL语言分类;

   DQL:数据查询语言  SELECT FROM WHERE组成;

   DML:数据操纵语言 UPDATE INSERT DELET组成;

   DDL:数据定义语言,用来定义数据库的各种对象表、视图、索引、同义词、聚簇等;

   DCL:数据控制语言,用来授予或者回收访问数据库的某种特权,并控制数据库操控事务的发生时间以及效果,对数据库实行监控;

     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值