随笔分类 -  SQL

Oracle 的for update行锁 (转)
摘要:键字: oracle 的for update行锁 SELECT...FOR UPDATE 语句的语法如下: SELECT ... FOR UPDATE [OF column_list][WAIT n|NOWAIT][SKIP LOCKED]; 其中: OF 子句用于指定即将更新的列,即锁定行上的特定列。 WAIT 子句指定等待其他用户释放锁的秒数,防止无限期的等待。 “使用FOR UPDATE WAIT”子句的优点如下: 1防止无限期地等待被锁定的行; 2允许应用程序中对锁的等待时间进行更多的控制。 3对于交互式应用程序非常有用,因为这些用户不能等待不确定 ... 阅读全文

posted @ 2012-06-06 00:33 奋斗者 阅读(15980) 评论(0) 推荐(0)

SELECT FOR UPDATE(转)
摘要:该文章有些不对的地方,不过作参考还可以。MySQL 使用SELECT ... FOR UPDATE 做事务写入前的确认以MySQL 的InnoDB 为例,预设的Tansaction isolation level 为REPEATABLE READ,在SELECT 的读取锁定主要分为两种方式:SELECT ... LOCK IN SHARE MODE SELECT ... FOR UPDATE这两种方式在事务(Transaction) 进行当中SELECT 到同一个数据表时,都必须等待其它事务数据被提交(Commit)后才会执行。而主要的不同在于LOCK IN SHARE MODE 在有一方事务 阅读全文

posted @ 2012-06-06 00:29 奋斗者 阅读(84111) 评论(4) 推荐(11)

使用for update卡住锁表的解决办法(转)
摘要:今天使用select * from bd_corp for update改了好几次之后,突然执行N长时间都不行,马上给用友打电话,我听到了“锁表”两个字。马上查询百度。们在操作数据库的时候,有时候会由于操作不当引起数据库表被锁定,这么我们经常不知所措,不知怎么给这些表解锁,在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话,但是我们很难找到那个会话被锁定了,想找到所以被锁的会话就更难了,下面这叫查询语句可以查询出所以被锁的会话。1,查看哪个表被锁select b.owner,b.object_name,a.session_id,a.lo 阅读全文

posted @ 2012-06-06 00:17 奋斗者 阅读(29543) 评论(0) 推荐(3)

sql replace into用法详细说明(转)
摘要:sql replace into用法详细说明REPLACE的运行与INSERT很相似。只有一点例外,假如表中的一个旧记录与一个用于PRIMARYKEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。所有列的值均取自在REPLACE语句中被指定的值。所有缺失的列被设置为各自的默认值,这和INSERT一样。您不能从当前行中引用值,也不能在新行中使用值。如果您使用一个例如“SET col_nam 阅读全文

posted @ 2011-11-10 11:49 奋斗者 阅读(21949) 评论(0) 推荐(0)

MySql删除重复记录问题、嵌套删除(转)
摘要:表emp中有主键empid,现在我想要删除非主键字段empno重复的记录,高手指点一下,写个具体的语句,从别的问题那COPY来的就别发了mysql的删除动作不能带有本表的查询动作,意思是你删除A表的东西不能以A表的信息为条件,如下不可以: delete from A where aa in (select bb from A);你可以通过建另外一张表,两张表匹配关系操作,如: create table t_b as select * from t_a group by empno; delete from t_a where empid not exists (select 1 from t_ 阅读全文

posted @ 2011-10-11 10:21 奋斗者 阅读(994) 评论(0) 推荐(0)

导航