数据库锁表是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库锁表是啥意思?相关的知识,希望对你有一定的参考价值。

1、数据库锁表的意思:因为在数据库里,同一个数据可能有多个人来读取或更改,为了防止我更改的时候别人也同时更改,这是一般要锁住表不让别人改。

2、举个简单例子:在更新数据库记录的过程中,我是不希望别人也来更新我的这些记录的,像库存,做出库的时候,原数量100,我出了20,我就需要把数量更新到80;

在更新的过程中,别人又做了30的出库,如果在我更新的时候,别人先把库存更新到70,然后我又更新80,那数量就错误了。所以我更新的时候,我就需要锁定这条记录。这是数据行锁,排他锁。

扩展资料:

数据库锁表的必要条件:

1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。

2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合P0,P1,P2,···,Pn中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

参考技术A

数据库锁表:在数据库里,同一个数据可能有多个人来读取或更改,为了防止更改的时候别人也同时更改,这里一般要锁住表不让别人改。当然还有其它各种复杂情况。

数据库锁从类型上讲,有共享锁,意向锁,排他锁。从锁的粒度角度来说,可以分为为行、页键、键范围、索引、表或数据库获取锁。(锁粒度是被封锁目标的大小,封锁粒度小则并发性高,但开销大,封锁粒度大则并发性低但开销小)

可能的原因有:

(1)字段不加索引:在执行事务的时候,如果表中没有索引,会执行全表扫描,如果这时候有其他的事务过来,就会发生锁表!

(2)事务处理时间长:事务处理时间较长,当越来越多事务堆积的时候,会发生锁表!

(3)关联操作太多:涉及到很多张表的修改等,在并发量大的时候,会造成大量表数据被锁!

出现锁表的解决方法有:

(1)通过相关的sql语句可以查出是否被锁定,和被锁定的数据!

(2)为加锁进行时间限定,防止无限死锁!

(3)加索引,避免全表扫描!

(4)尽量顺序操作数据!

(5)根据引擎选择合理的锁粒度!

(6)事务中的处理时间尽量短!

生产中出现死锁等问题是比较严重的问题,因为通常死锁没有明显的错误日志,只有在发现错误的时候才能后知后觉的处理,所以,一定要尽力避免!

扩展资料:

封锁是指事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。

锁表的基本类型有:

(1)排它锁(记为X锁)

排它锁又称为写锁。若事务T 对数据对象A 加上X 锁,则只允许T 读取和修改A , 其它任何事务都不能再对A 加任何类型的锁,直到T 释放A 上的锁。 

(2)共享锁(记为S锁)

共享锁又称为读锁。若事务T 对数据对象A 加上S 锁,则其它事务只能再对A 加S 锁,而不能加X 锁,直到T 释放A 上的S 锁。X锁和S锁都是加在某一个数据对象上的。

封锁单元有:

封锁的对象可以是逻辑单元,也可以是物理单元。

逻辑单元: 属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等;

物理单元:页(数据页或索引页)、块等。

封锁对象可以很大也可以很小,例如对整个数据库加锁、对某个属性值加锁。封锁对象的大小称为封锁的粒度。封锁的粒度越大,系统中能够被封锁的对象就越少,并发度也就越小,但系统开销也越小;封锁的粒度越小,并发度越高,但开销也就越大。

选择封锁粒度时必须同时考虑开销和并发度两个因素,进行权衡,以求得最优的效果。

一般原则为:

(1)需要处理大量元组的用户事务:以关系为封锁单元;

(2)需要处理多个关系的大量元组的用户事务:以数据库为封锁单位;

(3)只处理少量元组的用户事务:以元组为封锁单位

参考资料:封锁(数据库中的的封锁)_百度百科

参考技术B 锁表的概念稍微有点大,建议楼主找相关资料看一下数据库锁的相关知识。
举个简单例子:在更新数据库记录的过程中,我是不希望别人也来更新我的这些记录的,像库存,做出库的时候,原数量100,我出了20,我就需要把数量更新到80,在更新的过程中,别人又做了30的出库,如果在我更新的时候,别人先把库存更新到70,然后我又更新80,那数量就错误了。所以我更新的时候,我就需要锁定这条记录。这是数据行锁,排他锁。
这只是一个简单的例子,数据库的锁机制远比这个情景复杂。
锁从类型上讲,有共享锁,意向锁,排他锁。上面的例子是排它锁。
从锁的粒度角度来说,可以分为为行、页、键、键范围、索引、表或数据库获取锁。(锁粒度是被封锁目标的大小,封锁粒度小则并发性高,但开销大,封锁粒度大则并发性低但开销小)上面的例子中的锁粒度是行锁。
参考技术C 因为在数据库里,同一个数据可能有多个人来读取或更改,为了防止我更改的时候别人也同时更改,这是一般要锁住表不让别人改。当然还有其它各种复杂情况。基本意思就是这样。 参考技术D 就是数据库表被锁了呗

“oracle ”截断表是啥意思?

truncate table(截断表) 是清空一个表,是一个DDL语言,效率高,它与delete有如下区别。
delete是DML语言;
delete时会触发与表相关的触发器,而truncate不会;
delete可以有删除条件,truncate没有。

在Oracle中如果删除了表中的某一条数据,还可以通过回滚操作(rollback)进行回滚,假如想清空一张表的数据,但是又不想使其能进行回滚操作,就可以立刻释放资源,这时就需要使用截断表了。它的主要功能就是彻底删除数据,使其不能进行回滚。这里我打个比方大家就立刻能明了它的作用。大家众所周知,当我们在自己的PC(person computer)上删除某一个文件,它并没有彻底删除而是进入了回收站,你要在回收站中再将其删除才算彻底清除。截断表就相当于直接将数据从pc上删除,而不会放入回收站。
截断表格式:
truncate table 表名。
假如我们创建了一个tb_AW表
create tabletb_AW(
name varchar(10),
sex varchar(2) default '女'
);
插入数据
insert into tb_AW(name,sex) values('Joe','男');
insert into tb_AW(name,sex) values('周欣红','女');
查看表:
select *from tb_AW;

现在进行截断
truncate table tb_AW;;
为了确定表格是否已释放,我们回滚查看下
rollback;
输出结果:

注意这里回滚后,无法查到tb_AW表中的信息了,说明它已经彻底删除了,这就是截断表的功能。
虽然我们在操作中不会经常使用,但作为一个小知识点,可以去了解下。
参考技术A

“oracle ”截断表的意思是预定义工作。

对于创建索引的列,索引的类型是什么?count(distinct indexcol)的值是多少?Freelists对于有效地重新使用Oracle表空间中的空间是很重要的。作业调度器(cjq) :负责将调度与执行系统中已定义好的job,完成一些预定义的工作。功能:它显示了sql语句的执行路径,我们能看到Oracle内部是怎么执行的。

Oracle是全球大型数据库软件公司,总部位于美国加州红木城的红木岸。

参考技术B

在Oracle中如果删除了表中的某一条数据,还可以通过回滚操作(rollback)进行回滚,假如想清空一张表的数据,但是又不想使其能进行回滚操作,就可以立刻释放资源,这时就需要使用截断表了。它的主要功能就是彻底删除数据,使其不能进行回滚。这里我打个比方大家就立刻能明了它的作用。大家众所周知,当我们在自己的PC(personcomputer)上删除某一个文件,它并没有彻底删除而是进入了回收站,你要在回收站中再将其删除才算彻底清除。截断表就相当于直接将数据从pc上删除,而不会放入回收站。

参考技术C truncate table(截断表) 是清空一个表,是一个DDL语言,效率高,它与delete有如下区别。
delete是DML语言;
delete时会触发与表相关的触发器,而truncate不会;
delete可以有删除条件,truncate没有。

在Oracle中如果删除了表中的某一条数据,还可以通过回滚操作(rollback)进行回滚,假如想清空一张表的数据,但是又不想使其能进行回滚操作,就可以立刻释放资源,这时就需要使用截断表了。它的主要功能就是彻底删除数据,使其不能进行回滚。这里我打个比方大家就立刻能明了它的作用。大家众所周知,当我们在自己的PC(person computer)上删除某一个文件,它并没有彻底删除而是进入了回收站,你要在回收站中再将其删除才算彻底清除。截断表就相当于直接将数据从pc上删除,而不会放入回收站。
截断表格式:
truncate table 表名。
假如我们创建了一个tb_AW表
create tabletb_AW(
name varchar(10),
sex varchar(2) default '女'
);
插入数据
insert into tb_AW(name,sex) values('Joe','男');
insert into tb_AW(name,sex) values('周欣红','女');
查看表:
select *from tb_AW;

现在进行截断
truncate table tb_AW;;
为了确定表格是否已释放,我们回滚查看下
rollback;
输出结果:

注意这里回滚后,无法查到tb_AW表中的信息了,说明它已经彻底删除了,这就是截断表的功能。
虽然我们在操作中不会经常使用,但作为一个小知识点,可以去了解下。

以上是关于数据库锁表是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库表被锁了不能操作怎么办

oracle 锁表、解锁的语句

oracle表被锁了怎么处理?

索引表是啥意思

“oracle ”截断表是啥意思?

oracle数据库怎么锁表