如何实现多表提交(100分)

Z

zouqing

Unregistered / Unconfirmed
GUEST, unregistred user!
例数据库表:T1为主表,T2为名细表。T1表的primary key是auto increase,
如果t1,t2表新增为一事务,提交事务时并不知T1表的Primary key的值对于T1
表关系不大,但T2表必须!请教如何得到T1表的Primary key.
 
因为t1表的primary key 为auto increase
新增的记录一定为最大,用
select max(tt1) from T1
能得到t1的primary key
 
In multiuser enviroment,how does it???
 
sorry,我忘了这点,
不过我想可以在t1增加记录时,将t1 lock
select max(..)后unlock,
将这个max值放于一变量maxvalue,
现在不管t1的max如何增大,你的t2只需认准
maxvalue了,不知这样如何
 
sorry!我忘记了,
我想你可以在t1增加记录时lock ,
然后select max(..) ..,unlock
将这个MAX值放于一变量maxvalue,
此后,t2使用这个maxvalue,不管
t1如何增加了。
 
sorry!我忘记了,
我想你可以在t1增加记录时lock ,
然后select max(..) ..,unlock
将这个MAX值放于一变量maxvalue,
此后,t2使用这个maxvalue,不管
t1如何增加了。
 
请教怎么Lock,unlock? I really do not know how to lock or unlock
interbase table.
 
You can explicately use YourDatabase.StartTransaction.
 
主从关系中不建议用primary key是auto increase的,尤其是在多用户环境中,
因为记录越多,性能越差,有一方法可以解决,建一辅助表,该表中放有一计数器,
在提交前从辅助表中取出计数值,并修改辅助表中计数值+1,以此计数值作为主从表
键值提交,这种方法可以大大改善性能,因为辅助表中只有一条记录,所以不管主从表记录多少,对取键值没有影响。不过这种方法也有一定的缺陷,如果提交中失败,将会产生不连续的键值,但我想并不影响使用,因为即使采用auto increase在删除某条记录后也会产生不连续性。
 
主从关系中用auto increase主键是肯定不好的,
但另设一个表恐怕更有问题,多用户情况下这个表
也要加锁.
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部