ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于主外键表数据提交过程中的一点疑惑

关于主外键表数据提交过程中的一点疑惑

原创 Linux操作系统 作者:bq_wang 时间:2008-01-11 00:18:35 0 删除 编辑
关于主外键表数据提交过程中的一点疑惑

一直有疑问,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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-07

  • 博文量
    412
  • 访问量
    1103167