不要用sequence类型的字段做主外键,
如果主键不是自加型,可以先取原来的最大值+1,在取最大值时应该用for update 将表锁住。

解决方案 »

  1.   

    java程序可以生成触发器吗?另外,触发器怎么写啊,没写过
      

  2.   

    luckbird说在取最大值时应该用for update 将表锁住,怎么锁啊
      

  3.   

    你可以在t1表中建立一个触发器,当你t1表中插入数据时,就会触发该触发器,把你的数据插入到t2,t3...,
    的确,你在取最大值的时候应该使用for update 将表锁住,,
    就是这样   select max(id) from t1 for update;即可
      

  4.   

    select max(id) from t1 for update
    这句在oracle9i里不能执行啊,显示ora-01786:此查询表达式不允许for update
    select id from t1 for update倒是可以运行,但是并不是想要的数据
      

  5.   

    for update好像是锁定行吧,那锁定一个已经存在的行对于插入有什么意义,不明白。
      

  6.   

    不好意思,我刚才试了,用 for update确实是不行的,你可以用以下语句直接锁表lock table t1 in exclusive mode nowait;
      

  7.   

    要锁定的是最大值所在的行
    select id from t1 
    where id = (select max(id) from t1) for update