如procedure所示,要向TEST_DATA表中根据时间增量集成数据,先集成到T_TEST_DATA,
再集成到TEST_DATA (T_TEST_DATA是临时表,TEST_DATA 是正式表);
问题1:先向T_TEST_DATA 中集成这一步骤有必要要吗?先向T_TEST_DATA集成,再向TEST_DATA 集成,和不要 T_TEST_DATA 表,
直接向TEST_DATA 中集成有什么区别?
问题2: 集成的是 2023-05-01 到 2023-05-08的数据,从删除TEST_DATA表中 2023-05-01 到 2023-05-08的数据,再到从 T_TEST_DATA 表中集成进来,这是一个事务, 从commit到这个事务完成耗时久吗?
在这个事务进行的过程中,进行到 删除TEST_DATA表中 2023-05-01 到 2023-05-08的数据
或者 正在向TEST_DATA插入数据 的时候,此时select TEST_DATA表中 2023-05-01 到 2023-05-08的数据,是能查到数据的对吗?因为事务还没完成?
换句话说,会不会存在一种情况,在commit到这个事务完成过程中,刚好需要select TEST_DATA表中 2023-05-01 到 2023-05-08的数据,导致查询的数据为空??
对于问题1,使用T_TEST_DATA作为临时表的主要优点是可以在这个表上进行测试和调试,以确保数据的正确性和完整性。此外,使用临时表还可以在多个步骤之间分离数据的处理,从而使代码更加可读和易于维护。
另一方面,如果数据量较小或没有特殊要求,可以直接将数据插入到TEST_DATA表中,而不需要使用T_TEST_DATA作为中间表。
对于问题2,当使用事务进行数据处理时,删除或插入数据的操作不会立即生效,直到事务被提交才会生效。在这个过程中,如果需要select TEST_DATA表中2023-05-01到2023-05-08的数据,它们是不可用的,因为它们已经被删除或正在被替换。
因此,在使用事务处理数据时,如果需要在同一事务中删除和插入数据并查询相关数据,则应该在事务提交之前完成所有操作。否则,将出现查询不到相关数据的情况。事务处理的时间取决于处理的数据量以及系统的性能,可能会比较耗时。
问题1:在先集成到T_TEST_DATA再集成到TEST_DATA和不需要T_TEST_DATA表直接集成到TEST_DATA之间的区别在于,前者需要多一步插入到T_TEST_DATA表的操作,而后者不需要。如果T_TEST_DATA表不需要在之后的操作中使用,那么可以省略这一步骤,直接向TEST_DATA表中集成数据即可。
问题2:在一个事务中,从删除TEST_DATA表中2023-05-01到2023-05-08的数据,再到从T_TEST_DATA表中集成进来,这是一个原子操作,要么全部成功,要么全部回滚。在此期间,如果有查询语句访问TEST_DATA表,那么这些查询语句都会被阻塞,直到事务完成并提交。因此,在事务完成之前,查询TEST_DATA表中2023-05-01到2023-05-08的数据会返回空结果,因为这些数据已被删除,且尚未从T_TEST_DATA表中复制到TEST_DATA表中。只有在事务完成并提交后,这些数据才会重新出现在TEST_DATA表中,此时查询语句才能返回正确结果。事务完成所需的时间取决于事务中涉及的数据量和事务的复杂性,可能需要花费一定的时间。