关于数据库‘事务’‘锁’的几个问题

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Isabella327/article/details/96865317

1.什么时候用到事务?

答:事务是一个操作序列,其特点是不可再分,这些操作要么都执行,要么都不执行。例如银行转账中:从一个账号扣款并使另一个账号增款,这两个操作‘绑定’。一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。

2.事务的基本要素?

答:ACID

  • 原子性(atomic):一个事务中的操作要么全部提交成功,要么全部失败回滚。
  • 一致性(consistency):从一个一致的状态到另一个一致的状态。
  • 隔离性(isolation):一个事务做的修改,在提交前对其他事务是不可见的。
  • 持久性(durability):一旦事务提交,所做的改变就会永远封存在数据库中。

3.事务的隔离级别?

答:

  1. 未授权读取(未提交读):一个事务写数据,不允许其他事务写数据,但允许其他事务读。就是一个事务读取到其他事务未提交的数据。(解决了更新丢失问题,出现脏读问题)
  2. 授权读取(提交读):一个事务读数据,允许其他事务写数据,但未提交时禁止其他事务对该行的访问。就是一个事务读取到其他事务提交后的数据。Oracle默认隔离级别。(解决了脏读的问题,出现不可重复读问题)
  3. 可重复读:一个事务读的时候其他事务可读不可写,一个事务写的时候其他事务不可读不可写。就是一个事务对同一份数据读取到的相同,不在乎其他事务对数据的修改。MySQL默认的隔离级别。(出现幻读问题)
  4. 序列化:事务一个接一个的执行(性能太低)

4.数据库并发会出现的问题?

答:

  1. 更新丢失:两个事务对一行数据更新,一个事务的更新覆盖了另一个的;
  2. 脏读:一个事务读取到了另一个事务未提交的数据;
  3. 不可重复读:一个事务对同一行数据读取两次的结果不同(由于数据更新);
  4. 幻读:事务在第二次读的时候出现第一次未出现的数据情况(由于其他事务插入或删除数据造成的)。

5.并发控制技术?

答:

  1. 共享锁(s锁,读锁):可读不可写,其他事务也可加读锁;
  2. 排它锁(x锁,写锁,eXclusive lock):可读可写,其他事务不可加锁;
  3. 悲观锁:每次拿数据都认为别人会改数据,每次拿都上锁;
  4. 乐观锁:每次拿数据都认为别人不会改数据,每次拿都不上锁,更新时会看是否有其他人更新,让用户处理;
展开阅读全文

关于数据库几个问题!急求?

06-27

就是我一般在一个窗体用完一个数据库后就会将表和库关闭,但是在另一个窗体重新打开用时,它会提示说什么文件打开或关闭,不能进行此操作!明明我是关闭数据库的?提示错误语句为:rn db3.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\studentdb.mdb;Persist Security Info=False"rn rs3.Open "select * from ClassInfo where 班号 ='" & ss & " '"rnrn还有一个问题是关于MSFlexGrid1表格的,当我运行时会出现提示"对象变量或with块变量未设置",并指出错误为:rndb.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\StudentDB.mdb;Persist Security Info=False"rnSet ms1.DataSource = db.Execute("select * from studentinfo")rn是不是没连接ODBC啊?rn再说本来就对MSFlexGrid或是MHSFlexGrid 不熟,求哪位高人给我指点一下好吗?rnrn还有一个问题也是关于一个修改密码的运行时也会出现错误提示错误的语句为:rnDim db1 As New ADODB.ConnectionrnDim rs1 As New ADODB.RecordsetrnDim co1 As New ADODB.CommandrnPrivate Sub Command1_Click()rndb1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\studentdb.mdb;Persist Security Info=False"rnco1.ActiveConnection = db1rnco1.CommandText = "select * from tbUser where 用户名='" & Form2.usename1 & "'"rnco1.CommandType = adCmdTablernco1.CommandTimeout = 15rnSet rs1 = co1.Execute //主要是这一句rn本来不是用command属性的rn但是也是出现了上面第一个错误后改成这样的?虽然问题多了点,但我相信这对高人来说只是小CASE,求求各位给我解决一个好吗? 论坛

没有更多推荐了,返回首页