mysql——LOCK

<!-- /* Font Definitions */ @font-face {font-family:"MS 明朝"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-alt:"MS Mincho"; mso-font-charset:128; mso-generic-font-family:roman; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:宋体; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"MS ゴシック"; panose-1:2 11 6 9 7 2 5 8 2 4; mso-font-alt:"MS Gothic"; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:Century; panose-1:2 4 6 4 5 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"/@SimSun"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@MS 明朝"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-charset:128; mso-generic-font-family:roman; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:"MS Pゴシック"; panose-1:2 11 6 0 7 2 5 8 2 4; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:variable; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:"/@MS Pゴシック"; panose-1:2 11 6 0 7 2 5 8 2 4; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:variable; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:"/@MS ゴシック"; panose-1:2 11 6 9 7 2 5 8 2 4; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0mm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:Century; mso-fareast-font-family:"MS 明朝"; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} pre {margin:0mm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"MS ゴシック"; mso-bidi-font-family:"MS ゴシック";} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:99.25pt 30.0mm 30.0mm 30.0mm; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:18.0pt;} div.Section1 {page:Section1;} -->

statement: 一个 SQL 句。

session: 一个由 ORACLE 户产 生的 接,一个用 可以 生多个 SESSION ,但相互之 是独立的。

transaction: 所有的改 都可以划分到 transaction 里,一个 transaction 包含一个或多个 SQL 。当一个 SESSION 建立的 候就是一个 TRANSACTION 始的 刻,此后 transaction 始和 束由 DCL 控制,也就是 COMMIT/ROLLBACK 示着一个 transaction 束。

consistency :是 statement 级别 而不是 transaction 级别 的。 sql statement 得到的数据都是以 sql statement 始的 IMAGE

LOCK 的基本情况:

update, insert ,delete, select ... for update LOCK ROW

只有一个 TRANSACTION 可以 LOCK 的行,也就是 如果一个 ROW LOCKED 了,那就不能被其他 TRANSACTION LOCK 了。

LOCK statement 生但却由 TRANSACTION 尾( commit rollback ),也就是 一个 SQL 完成后 LOCK 会存在,只有在 COMMIT/ROLLBACK 后才会 RELEASE

SELECT.... FOR UPDATE [OF cols] [NOWAIT];
OF cols
SELECT cols FROM tables [WHERE...] FOR UPDATE [OF cols] [NOWAIT];

前面的 FOR UPDATE 省略,下面我 一下 OF

transaction A 运行
select a.object_name,a.object_id from wwm2 a,wwm3 b
2 where b.status='VALID' and a.object_id=b.object_id
3* for update of a.status

transaction B 可以 b wwm3 的相 DML 操作 , 但不能 a wwm2 DML 操作 .

反一下看看。

transaction A 运行
select a.object_name,a.object_id from wwm2 a,wwm3 b
2 where b.status='VALID' and a.object_id=b.object_id
3* for update of b.status

transaction B 可以 a wwm2 的相 DML 操作 , 但不能 b wwm3 DML 操作 .

也就是 LOCK 是行 , 只是如果不加 OF 所有 及的表 LOCK , 加了 OF 后只会 LOCK OF 字句所在的 TABLE.

NOWAIT (如果一定要用 FOR UPDATE ,我更建 加上 NOWAIT

当有 LOCK 冲突 会提示 错误 STATEMENT 而不是在那里等待 . 返回 错误 "ORA-00054: resource busy and acquire with NOWAIT specified"

另外如下用法也 得推荐, 应该 酌情考 使用。

FOR UPDATE WAIT 5

5 秒后会出 提示:

ORA-30006: resource busy; acquire with WAIT timeout expired
FOR UPDATE NOWAIT SKIP LOCKED;

提示:

no rows selected
TABLE LOCKS
LOCK TABLE table(s) IN EXCLUSIVE MODE [NOWAIT];

也是在 transaction 才会 lock

DEADLOCK:

transaction a lock rowA , then transaction b lock rowB
then transaction a tries to lock rowB,
and transaction b tries to lock rowA

就是 两个 transaction 都相互 试图 lock 方已 lock ROW ,都在等待 放自己的 lock 这样 就使死 。另外, deadlock 也会有 600 提示。

使用

Select…For Update 句的 法与 select 句相同,只是在 select 句的后面加 FOR UPDATE [NOWAIT] 子句。

该语 句用来 定特定的行(如果有 where 子句,就是 where 条件的那些行)。当 些行被 定后,其他会 可以 选择这 些行,但不能更改或 些行,直到 该语 句的事 commit 句或 rollback 止。

20.51 所示,左上角的会 Select…For Update 定了 Department 表中 DeptNo='01' 的行,右上角的会 话说 明其他会 不可以 继续 更改 行上的数据。从 OEM 中的 的信 息可以看出, Select…For Update 句所加的 update 句所加的 相同:一个行 级别 EXCLUSIVE 明多个事 不能同 操作同一行)、一个表 级别 ROW EXCLUSIVE

 

20.51   Select…For Update 定了符合 where 条件的行

20.52 所示,左上角的会 Update 定了 Department 表中 DeptNo='01' 的行,右上角的会 话说 明其他会 不可以用 Select…For Update 继续锁 行。

 

20.52   Select…For Update 句被其他会 阻塞了

20.53 所示,左上角的会 Update 定了 Department 表中 DeptNo='01' 的行,右上角的会 话说 明其他会 不可以用 Select…For Update NOWAIT 继续锁 行,且会立即返回一个 错误 提示 “ORA-00054: 源正忙 , 但指定以 NOWAIT 方式 ,而不需要等待加 成功。

 

20.53    如果加 不成功, Select…For Update NOWAIT 句就会立即返回 错误 提示

可 以看出,如果 仅仅 update 句来更改数据 ,可能会因 加不上 而没有响 地、莫名其妙地等待,但如果在此之前,先用 Select…For Update NOWAIT 句将要更改的数据 探性地加 ,就可以通 立即返回的 错误 提示而明白其中的道理,或 许这 就是 For Update NOWAIT 的意 之所在。

 

 

 

 

 

你不会是在一个批



理中建立多个表吧,比如


create table 1

.....

 

create table 2

.....

create table 3

.....

....

go

最后才出个

go




不建









这样

写。


根据我的理解你可能是:你







行的



候都是按

f5

或上面那个

绿

色小三角,

这样





你的

查询

分析器中的所以



句都要



行,而







的一部分前面你已

经执





了,是不是?


你可以用鼠

标选

中你要



行的



句,然后按

f5

或上面的那个

绿

色小三角


 

至于有外

键约

束的表



除不了,你可以



除外

键约

束,


sp_help 

表名字




看外

键约

束的名字,然后






drop 



键约

束名字


 

把表建立在

master

数据



中,你可以

这样


select name from sysobjects where type='u'

--





master

数据



中的表,如果你确



把表建立在



个数据



中了。



行下面


drop 

表名字

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值