在oracle中使用sql语句执行了delete和update和insert命令,在本地数据库中已执行成功查看并没有删除成功或更新数据库,很是尴尬,为什么会出现这种不一致的情况呢?
原来是因为我执行命令后没有commit提交,那么更新的内容只是被保存到内存中,而不是提交到数据库中,将不会被其他Session(对话)看到,其他对话看到的是更新前的数据。当用户退出对话时,Oracle才会自动commit。
SQL语言分为五大类:
DDL(数据定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。
DQL(数据查询语言)- Select查询语句不存在提交问题。
DML(数据操纵语言) - Insert、Update、Delete 这些语句需要Commit才能提交。
DTL(事务控制语言) - Commit、Rollback 事务提交与回滚语句。
DCL(数据控制语言) - Grant、Revoke 授予权限与回收权限语句。
执行完DML语句,若没有commit再执行DDL语句,也会自动commit未被commit的数据。
如果打开自动提交,DML操作后也不需要手动提交:SET AUTOCOMMIT ON;
本文解释了在Oracle数据库中执行SQL语句如DELETE、UPDATE和INSERT后为何未见实际效果的原因。作者指出,若未使用COMMIT命令提交更改,则这些更改仅存在于当前会话的内存中,不会永久保存至数据库,也不会对其他会话可见。

1万+

被折叠的 条评论
为什么被折叠?



