spring oracle 锁表-为什么insert操作会把整张表都锁住呢?

问题描述

为什么insert操作会把整张表都锁住呢?

项目中遇到一个很奇怪的问题:
问题描述:现在需要从项目外部导大量的数据到项目内,这个时候我起了一个spring事务往很多张表中去插入数据,这个时候其他用户访问系统去更新旧的数据的时候发现表被锁了。也就是说我在导入数据的时候,其他用户都不能对系统的表进行相应的更新操作。这是为什么????

解决方案

查的时候不会锁住,只有曾删改才会

解决方案二:

当ORACLE执行insert等DML语句时,会首先自动在所要操作的表上申请一个TM锁,当TM锁获得后,再自动申请TX类型的锁。当两个或多个会话在表的同一条记录上执行DML语言时,第一个会话在记录上加锁,其它的会话处于等待状态,一直到第一个会话提交后TX锁释放,其它的会话才可以加锁。考虑是因为两个insert语句同时试图向一个表中插入PK或unique值相同的数据,而造成其中会话被阻塞,等待其它会话提交或回滚,因而造成死锁。这种情况,只要其中任何一个session提交,另外一个就会报出ORA-00001:违反唯一性约束条件,死锁终止;或者其中一个session回滚,另外一个即可正常执行。

解决方案三:

当ORACLE执行CRUD时DML语句时,都会被锁住只到提交或者回滚之后才会解锁。

时间: 2024-09-08 14:13:05

spring oracle 锁表-为什么insert操作会把整张表都锁住呢?的相关文章

sql使用触发器当一张表插入数据就往另一张表插入数据

问题描述 sql使用触发器当一张表插入数据就往另一张表插入数据 日期格式是这样的但是使用触发器当上图插入了一条数据就往下图插入相同的数据,如下图为什么日期格式不一样呢? 解决方案 SQL(二) 将一张表数据插入另外一张表从表中插入数据到另外一张表oracle 将一张表的数据插入到另一张表 解决方案二: 日期格式的问题,先确保两张表对应列的数字类型一致,插入使用convert格式化一下:CONVERT(varchar(10), GETDATE(), 111).

数据库中把一张表中的值传给另一张表中相同的字段

问题描述 数据库中把一张表中的值传给另一张表中相同的字段 数据库中有两张表A,B,大部分字段相同,A表中没有数据,要把B表中的数据传给A表中相对应的字段 解决方案 11两种情况 2.B表中的行在A表中都有,A表仅是缺少部分数据列 UPDATE A SET A.F1 = B.F1,A.F2=B.F2 FROM B WHERE A.Id = B.Id AND B.Filter=... 3.B表中的数据未必在A表中都用,A表不仅缺数据列,还缺数据行.要执行两句(MSSQL) INSERT INTO A

sql server 2008-欲使这组数据满足第3范式,则需创建多少张表?范式不是针对一张表而言的吗?

问题描述 欲使这组数据满足第3范式,则需创建多少张表?范式不是针对一张表而言的吗? 这张初始表是一组菜单数据,从左到右依次是序号.菜名.菜的主食.菜的种类. 我的理解是,范式是针对一张表而言的,而这道题要求把一张表分成好几张表,才能满足第3范式,这是怎么回事呢?点击图片左下方的"全部展开"可以看到全图.CSDN看图的这点设置略坑啊.别人还以为我只发了半张图. 解决方案 点击图片左下方的"全部展开"可以看到全图.CSDN看图的这点设置略坑啊.别人还以为我只发了半张图.

vb.net 结构树sql表中自动编号在另一张表中怎么能同时更新

问题描述 vb.net 结构树sql表中自动编号在另一张表中怎么能同时更新 我在用VB.NET和SQL做treeview结构树 时 数据库中有两张表 一张是结构树表 一张是结构树数属性表 结构树表的编号是自动编号的 我怎么将结构树中的自动编号 放到另一张属性表中 解决方案 两张表肯定要有主外键关联的啊,通过联表查询可得 解决方案二: 在sql中设置级联更新或者用触发器

sql-数据库修改整张表某列的值

问题描述 数据库修改整张表某列的值 以前数据库中某列的值是"****第00001号","****第00002号", 怎么写sql将里面的所有 "第"字去掉,并且将"00001"变为"1",将0数字前面的0去掉 解决方案 update 表 set 列名= right('列名',2): 试试看 解决方案二: 你是想要将该列中所有的'第0000'去掉的话可以执行下面sql update 表名 set 字段 = R

『求助』存储过程执行后有两张表,为什么while后只有第一张表显示

问题描述 解决方案 解决方案二:遮挡的太多!应该是缺少移动记录集指针的语句解决方案三:你可以看看人家.net的ExcuteReader的文档和任何介绍,你在哪里看到过支持返回两张表的,请贴出来吧.解决方案四:引用1楼xuzuning的回复: 遮挡的太多!应该是缺少移动记录集指针的语句 这是我写的两个方法,一个用dataset,一个用sqldatareader,都是只能返回第一张表的SqlDataAdapterda=newSqlDataAdapter();da.SelectCommand=newS

SQL Server大数据导入导出:将一张表的数据导入到另一张表

         今天下午休息的时候又被扔给一项任务:把全国的街道数据导入街道表.但是他们扔给我的SQL脚本是从网上down的一个,跟平台这边的数据库设计的完全不一样.               当时的思路是:先把扔给我的脚本在本地生成一个表,然后选出要的数据,批量插入到开发库所在服务器的表.               然后,按照这个思路做了个测试:         INSERT INTO dbo.test_Street(Code,CountyCode,CnName,VersionNo,Cr

请问怎样查询整张表的数据,不用拼接的方法,谢谢

问题描述 usingSystem.Data.SqlClient;namespaceWindowsFormsApplication7{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){stringSql;stringConnectionString="Server=(local);IntegratedSecurity=

ASPX如何获取Datagrid修改后的整张表数据?

问题描述 如下图所示,Datagrid测试一列设置了Textbox,可编辑.问题是在修改这部分数据后,如何获取Datagrid里所有的新数据? 解决方案 解决方案二:MSDN提供的示例