SQL 上锁是啥意思?举例说明.

来源:百度知道 编辑:UC知道 时间:2024/05/28 03:40:20

上锁其实就是在他访问一个表的时候别的线程不能访问或不能改动(根据锁的类型不同访问限制也不同),上锁就是为了防止死锁,比如在多线程中两个线程访问两个表,然后同时互相访问,这时候两个表都没有放弃对原先表的控制权,就出现了互相等待对方放弃控制权的情况(死锁)

为了避免并发控制而做的,当两个人同时操作一个表的同一条记录时,就有并发控制,会出现记录混乱,所以就加锁控制

查看sql帮助,了解事务和锁的概念。只有自己实践,才能深刻理解。听别人讲也许能记住,但很难自己应用

在多用户环境中,有两种用于更新数据库中数据的模型:开放式并发和保守式并发。设计 DataSet 对象的目的是为了促进将开放式并发用于长时间运行的活动,例如对数据进行远程处理以及与数据进行交互时。

保守式并发涉及到锁定数据源中的行,以防止其他用户因修改数据而影响当前用户。在保守式模型中,当用户执行会应用锁的操作时,其他用户将无法执行可能与锁发生冲突的操作,直到锁所有者释放锁为止。此模型主要用于以下环境:对数据存在激烈争用,使得用锁保护数据的成本少于在发生并发冲突时回滚事务的成本。

因此,在保守式并发模型中,更新行的用户建立锁。在该用户完成更新并释放锁之前,其他任何用户都无法更改锁定行。因此,如果锁定时间将会比较短(例如在以编程方式处理记录时),最好实现保守式并发。如果用户与数据进行交互,会使记录锁定相对长的时间,保守式并发并不是可伸缩的选项。

对比之下,使用开放式并发的用户在读取行时不会锁定该行。当用户要更新某行时,应用程序必须确定自读取该行以来,其他用户是否更改了该行。开放式并发通常用于对数据争用较少的环境。由于不需要锁定任何记录,开放式并发将会提高性能,因为锁定记录需要更多的服务器资源。另外,为了维护记录锁,需要与数据库服务器保持持久连接。由于在开放式并发模型中并不会这样,所以与服务器的连接可以在较少的时间内为更多的客户端提供服务。

在开放式并发模型中,如果当某用户接收到来自数据库的值后,另一用户在该用户试图修改该值之前即将其修改,则认为发生了冲突。

测试是否存在开放式并发冲突的方法有若干种。其中一种涉及到在表中包含时间戳列。数据库通常会提供时间戳功能