oracle怎么更新主鍵,oracle如何修改主鍵

在oracle中怎樣用一條sql語句更新兩張有主外鍵關(guān)系的表的記錄

作者表 A (ID,NAME,AGE,SEX)其中ID為主鍵,文章表B(ID,AID,ARTICLE)其中ID為主鍵,AID為外鍵。如果你希望更新表A中某個作者的ID,并同時更新文章表B中對應(yīng)的數(shù)據(jù),那么寫一個觸發(fā)器:

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了勐海免費建站歡迎大家使用!

create or replace trigger "A"

after update

of ID

on A_author

for each row

begin

if (:new.ID:old.ID ) then

update B_article set AID = :new.ID where AID = :old.ID;

end if;

end A;

Oracle如何添加主鍵約束

工具/材料

SQL Developer

01

首先打開SQL Developer軟件,找一個沒有主鍵約束的表,如下圖所示

02

然后我們新建一個查詢,在界面中輸入如下的約束修改語句,如下圖所示,主要通過add constranint來添加約束

03

編寫完約束添加語句以后,點擊工具欄中的執(zhí)行按鈕,如下圖所示,如果輸出欄顯示已變更則證明主鍵約束創(chuàng)建成果

04

然后我們進(jìn)入STUDENT表的約束添加頁中可以看到,我們加的主鍵約束已經(jīng)添加進(jìn)去了,如下圖所示

05

另外,創(chuàng)建表的時候可以直接添加主鍵約束,如下圖所示,直接在表創(chuàng)建語句中添加constraint即可

06

表創(chuàng)建完以后,記得在左側(cè)刷新數(shù)據(jù)庫信息,如下圖所示,因為你創(chuàng)建的信息不刷新的話不會更新

07

最后打開你所創(chuàng)建的表,看到你添加的主鍵約束已經(jīng)加入進(jìn)來了,這種方式的效果alter的方式是一樣的

oracle 外鍵如何更新

用scott用戶打開兩個窗口

1、外鍵無索引時,子表更新外鍵未提交,主表更新非子表引用的主鍵時被阻塞

會話1:

create table t1 (x int primary key);

insert into t1 values(1);

insert into t1 values(2);

insert into t1 values(3);

commit;

create table t2(y int references t1);

insert into t2 values(1);

commit;

update t2 set y=2 where y=1;

會話2:

update t1 set x=4 where x=3; //會話被阻塞

2、外鍵有索引時,子表更新外鍵未提交,主表更新非子表引用的主鍵時不會被阻塞

會話1:

create index t2_index on t2(y) ; //創(chuàng)建外鍵索引

update t2 set y=2 where y=1;

會話2:

update t1 set x=4 where x=3;

已更新 1 行;//可以正常更新

3、外鍵有無索引,對于子表更新外鍵未提交,主表更新相對應(yīng)的主鍵無影響,更新主鍵的session都會被阻塞

會話1:

update t2 set y=2 where y=1;

會話2:

update t1 set x=4 where x=1; //更新子表已引用的

會話被阻塞。

會話1:

update t2 set y=2 where y=1;

會話2:

update t1 set x=4 where x=2 ; //更新子表將要引用的

會話被阻塞。――很好理解,主表要判斷是否違反約束

二、更新子表非外鍵列未提交

1、外鍵無索引,更新主表已被外鍵引用的主鍵時,更新主鍵的session被阻塞

會話1:

create table t1 (x int primary key,x1 int);

insert into t1 values(1,1);

insert into t1 values(2,2);

insert into t1 values(3,3);

commit ;

create table t2(y int references t1,y1 int);

insert into t2 values(1,1);

commit ;

update t2 set y1=2 where y1=1;

會話2:

update t1 set x=4 where x=1; //更新外鍵引用的主鍵

會話被阻塞。

2、外鍵有索引,更新主表已被外鍵引用的主鍵時,更新主鍵的session不會被阻塞而報約束錯誤

會話1:

create index t2_index on t2(y);

update t2 set y1=2 where y1=1;

會話2:

update t1 set x=4 where x=1

*

ERROR 位于第 1 行:

ORA-02292: 違反完整約束條件 (SCOTT.SYS_C001607) - 已找到子記錄日志

3、外鍵無索引,更新主表未被外鍵引用的主鍵時,更新主鍵的session被阻塞

會話1:

drop index t2_index;

update t2 set y1=2 where y1=1

會話2:

update t1 set x=4 where x=2;

會話被阻塞。

4、外鍵有索引,更新主表未被外鍵引用的主鍵時,更新主鍵的session不會被阻塞

會話1:

create index t2_index on t2(y);

update t2 set y1=2 where y1=1;

會話2:

update t1 set x=4 where x=2;

已更新 1 行。

另外在一個主表有on delete cascade,子表沒有外鍵索引時,對主表操作會級聯(lián)到子表,子表將進(jìn)行全表掃描。

總結(jié):在需要更新主鍵的情況下,最好是創(chuàng)建子表的外鍵索引。

oracle 表新增一個LOG_ID字段,Update更新LOG_ID主鍵,表有2000W數(shù)據(jù),耗時很久,有什么辦法快速更新。

業(yè)務(wù)不忙時可開啟并行,另外也不知道具體怎么更新,注意綁定變量什么的

可試試有索引或主鍵先就先讓其失效,更新完再維護(hù)下

ORACLE 更改主鍵怎么改?

1、首先應(yīng)該刪除已有的主鍵約束\x0d\x0a ①若已知道該主鍵命名\x0d\x0a\x0d\x0a alter table 表名 drop constraint 主鍵名;\x0d\x0a\x0d\x0a ②若不知道朱建命名\x0d\x0a\x0d\x0a SELECT * from user_cons_columns c where c.table_name = '表名';\x0d\x0a\x0d\x0a 找到主鍵字段column對應(yīng)的主鍵名,再執(zhí)行①\x0d\x0a\x0d\x0a2、增加新的主鍵約束\x0d\x0a alter table 表名 add constraint 主鍵名 primary key(字段名);

oracle 如果存在主鍵則更新(update),否則添加新紀(jì)錄(insert)怎么寫。

Create Or Replace Procedure p_Update_Add(Pn_Id ? ? In Number, --傳入的id

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Ln_Code ? Number, --返回碼

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Lr_Reinfo Number) Is

Ln_Flags Number;

Begin

Select Count(1) Into Ln_Flags From t_Test Where Id = Pn_Id; --t_test為測試表

If Ln_Flags 0 Then

--有一條或多條記錄存在,表示主鍵已經(jīng)存在,進(jìn)行更新操作

Update t_Test Set Xxx = Xxx;

Lr_Code ? := 1;

Lr_Reinfo := '進(jìn)行更新';

Elsif Ln_Flags = 0 Then

--沒有記錄,進(jìn)行添加操作

Insert Into t_Test Values (Xx, Xxx, Xxx, Xxx);

Lr_Code ? := 2;

Lr_Reinfo := '進(jìn)行新增';

Else

Lr_Code ? := -1;

Lr_Reinfo := '操作失敗';

End If;

Exception

When Others Then

Dbms_Output.Put_Line('出現(xiàn)異常');

Rollback;

End;

文章名稱:oracle怎么更新主鍵,oracle如何修改主鍵
網(wǎng)頁鏈接:http://muchs.cn/article32/hssjsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化靜態(tài)網(wǎng)站、做網(wǎng)站、軟件開發(fā)、虛擬主機、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管