我正在使用Oracle数据库管理系统。我使用了标准的SQL插入查询。
问题是即使插入成功,新插入的数据也不会显示在表中。当我重新启动计算机并再次打开应用程序时,数据显示出来。
如何解决这个问题?
答案 0 :(得分:2)
插入后应使用COMMIT
。
使用COMMIT语句结束当前事务并在事务中执行永久性所有更改。事务是Oracle数据库视为单个单元的一系列SQL语句。此语句还会擦除事务中的所有保存点并释放事务锁。
在您提交交易之前:
您可以通过查询已修改的表临时查看在会话期间所做的任何更改,但其他用户无法看到更改。提交交易后,其他用户可以看到更改。提交后执行的语句。
您可以使用ROLLBACK状态员回滚(撤消)在事务期间所做的任何更改
最佳做法是在每次创建,更新,删除,修改语句后使用COMMIT;
。
答案 1 :(得分:1)
承认你的工作。在会话A提交事务之前,您可能会插入会话A并使用会话B(另一个窗口)进行查询。 Oracle不会向其他会话显示未提交的更改。
Oracle不允许或支持DIRTY READS。例如,Oracle中的READ UNCOMMITTED隔离级别不遵循与SQL Server相同的实现。您将只看到执行它们的会话(事务)中的更改,直到它们被提交。
如果您从插入它的同一会话中查询了数据,您就会看到数据。如果您是Oracle新手,则必须了解多版本并发控制(MVCC)及其与其他数据库体系结构的区别。
至于为何在重启后看到数据?你没有提到"应用程序"你用过。例如,退出SQLPlus时,它会自动提交。如果您希望每个语句都自动提交,您可以使用" SET AUTOCOMMIT ON"但这可能有点危险,因为您无法使用ROLLBACK来恢复错误的更改。