知识点小结1(select from for update)

本文介绍了Oracle数据库中使用SELECT...FOR UPDATE实现记录锁定的方法,防止多线程同步时的数据冲突。此外,还讲解了如何利用子查询创建新表,快速复制现有表结构和数据。

1.select  from for update

      对我们在使用ORACLE进行数据处理的时候,有时需要对查询出来的记录进行锁定,禁止其他进程对该记录进行修改操作。oracle数据库提供了一种利用SELECT的FOR UPDATE子句实现的方法(可能sqlserver也有这个功能,但是没有测试过)。通过select from ta for update方法,可以将查询结果中的记录进行update锁定,及不允许其他进行对这些记录进行修改。我们还可以通过select from for update of a.a;(a表的a列)对记录中的某一列进行锁定。当我们使用FOR UPDATE子句将记录锁定后,其他进程在对锁定记录进行update或delete操作时,就会处于停顿状态,等待解锁。当锁定进程释放锁定以后才会继 续执行。如果不想其他进行进入停顿状态,可以用nowait子句,直接返回操作异常信息,提示操作的记录处于锁定状态不能进行修改。所以我们在做多线程同步时,可以通过select form ta for update nowait的方法防止多个进程同时操作同一数据。这种锁定方式是建立在数据库连接的基础上,一旦连接断开或者锁定进程commit时,这种锁定就自动解除。同时这种锁定方式是一种update锁定,锁定时不影响其他的select操作。

 

2.使用子查询创建表

所用查询都可用作表结构和行来源,其语法如下所示:

create table [schema.] table as subquery;

所用查询都返回行的二维集合;这个结果存储为新的表。使用子查询创建表的简单示例是:

create table employees_copy as select * from employees;

这句语句会创建表employees_copy,它完全是employees表的副本,它们的定义和包含的行完全相同。注意:列上的所用not null和check约束也将应用于新表,但所有的primary key,unique或者foreign key约束则不适用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值