暂无图片
Oracle 有一个数据写入和查询的需求,写入是先truncate再insert ,怎样保证查询时不会查到空?
我来答
分享
暂无图片 匿名用户
Oracle 有一个数据写入和查询的需求,写入是先truncate再insert ,怎样保证查询时不会查到空?

Oracle 有一个数据写入和查询的需求,写入是先truncate再insert ,怎样保证查询时不会查到空?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
Zixin Huo

在Oracle中,如果需要在truncate和insert之间保证查询不会查到空,可以考虑使用数据库事务。

可以在一个事务中执行truncate和insert操作,这样如果查询在该事务结束之前进行,将会看到truncate之前的数据,而不会看到空数据。在事务结束之后,所有数据都已经被成功插入,查询将看到完整的数据集。

例如,以下是一个示例代码,以保证查询不会查到空:

BEGIN -- 开始事务 BEGIN -- 执行truncate操作 TRUNCATE TABLE mytable; -- 执行insert操作 INSERT INTO mytable (column1, column2) VALUES ('value1', 'value2'); INSERT INTO mytable (column1, column2) VALUES ('value3', 'value4'); -- 可以插入更多数据 END; -- 提交事务 COMMIT; END;

上面示例中,truncate和insert操作被包含在BEGIN和END块之间,这些块被组合成一个事务。所以在这个事务中,所有操作都将被作为一个原子操作执行,如果有任何一个操作失败,整个事务将被回滚。

暂无图片 评论
暂无图片 有用 0
DarkAthena
2023-04-23
chatgpt不靠谱,truncate会自动提交的
Zixin Huo
答主
2023-04-24
是的,truncate 操作会自动提交,那是因为 truncate 操作会释放表上的所有锁,并将表的存储空间归零,所以才导致的无法回滚。 如果需要在 truncate 和 insert 操作之间进行回滚操作,可以用事务来控制。
Thomas

truncate执行了不是隐式提交了吗?例如:TRUNCATE 10:00---10:05,INSERT 10:05--10:20,那么在10:00--10:05期间查询,表应该被锁了,查不了吧?而在10:05--10:20期间发起的查询,查不出记录。也正常啊。所以感觉这个和是否有TRUNCATE无关,而和之后批量插入的耗时有关。 

暂无图片 评论
暂无图片 有用 1
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏