作为一个小白,刚接触数据库操作,今天在oracle中使用sql语句执行了delete和update命令,在本地数据库中已执行成功,兴致冲冲的向老大汇报任务时,但是他那边查看并没有删除成功或更新数据库,很是尴尬,为什么会出现这种不一致的情况呢?
原来是因为我执行命令后没有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语句的提交机制,特别是DML语句如DELETE和UPDATE需要显式提交(commit)才能使更改生效,否则更改仅存在于会话内存中,不会被其他会话看到。

1599

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



