關於主外來鍵表資料提交過程中的一點疑惑

bq_wang發表於2008-01-11
關於主外來鍵表資料提交過程中的一點疑惑

一直有疑問,Oracle是基於事務的,事務內的所有操作必須一次性提交,要麼成功要麼失敗。
建了一張簡單的主表和引用表,如果分開插入資料並提交當然是沒問題的,問題就在於放在一個事務內去提交的話,假設主表先插資料,但是應該還沒有寫入到資料庫中,然後再引用表中再插入資料,為什麼能夠一次性提交成功或者失敗呢? 還沒有寫到主表中,當然寫引用表的時候會缺乏關聯關係啊,不過事實上已經成功了

還有類似的操作
例如
Insert into temptable select 1 from onetable;
Insert into temptable select count(*) from temptable;
事實上已經按照順序寫入了
-- Create table
create table ChildTable
(

ID number(20,0),


Name Varchar2(20)

);
-- Create/Recreate primary, unique and foreign key constraints
alter table ChildTable

add constraint ChildTablePrimarykey primary key (ID);


-- Create table
create table MainTable
(

ID number(20,0),


ForeignID number(20,0),


Name Varchar2(20)

);
-- Create/Recreate primary, unique and foreign key constraints
alter table MainTable

add constraint MainTablePrimarykey primary key (ID);

-- Create/Recreate primary, unique and foreign key constraints
alter table MAINTABLE

add constraint MainTableForeignKEY foreign key (ForeignID)


references ChildTable (ID);



INSERT INTO ChildTable VALUES(1,'ChildA');
COMMIT;
INSERT INTO MainTable VALUES(1,1,'MainA');
COMMIT;

-- Created on 2008-1-9 by bq_wang
BEGIN

-- Test statements here


SAVEPOINT do_insert;


INSERT INTO ChildTable VALUES(2,'ChildA');


INSERT INTO MainTable VALUES(2,2,'MainA');


COMMIT WORK ;

EXCEPTION

WHEN OTHERS THEN


ROLLBACK TO do_insert;


DBMS_OUTPUT.put_line('ERROR');

END;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-134193/,如需轉載,請註明出處,否則將追究法律責任。

相關文章