【问题标题】:Oracle Cannot retain dataOracle 无法保留数据
【发布时间】:2020-04-10 15:15:38
【问题描述】:

我的系统上安装了 oracle 数据库

我通过命令行访问它。

win+r > cmd > sqlplus

我已经创建了一个用户

system

password system

我创建了一个表

create table users ( username varchar(20));

插入了几条记录。

insert into users (username ) values ('user1');
insert into users (username ) values ('user2');

然后我退出

>exit

问题是当我尝试再次登录时。

桌子还在。但是我插入的数据不见了。

select * from users;

输出

no rows selected

【问题讨论】:

  • 我认为您实际上并没有创建用户“SYSTEM”——这是一个默认的管理帐户。你永远不应该用它来存储数据。
  • 在插入数据后输入 commit 并回车。否则,一旦您退出会话,数据将丢失。 Oracle(R.D.B.M.S)不同于mysql。

标签: sql oracle


【解决方案1】:

SQL*Plus 可以选择自动提交:

SET AUTO[COMMIT]{ON | OFF | IMM[EDIATE] | n}

来自documentation

  • 在 Oracle 数据库执行每个成功的 INSERT、UPDATE 或 DELETE 或 PL/SQL 块后,ON 将挂起的更改提交到数据库。
  • OFF 禁止自动提交,因此您必须手动提交更改。
  • 当 SQL*Plus 退出时,SET AUTOCOMMIT 不会改变提交行为。 默认情况下会提交任何未提交的数据。

要控制EXIT 上的提交,您需要在SQL*Plus 中设置EXITCOMMIT 参数:

SQL> show exitcommit
exitcommit ON
SQL> set exitcommit off

如果设置为 OFF,那么您需要在作为 DML 事务的插入语句之后显式 COMMIT。创建表是一个执行隐式提交的 DDL 语句。

insert into users (username ) values ('user1');
insert into users (username ) values ('user2');
COMMIT; --> add this

我已经创建了一个用户系统

SYSTEM 是安装 Oracle 数据库时自动创建的管理用户帐户。它用于管理任务,而不是存储应用程序数据等。为您的应用程序创建一个单独的用户。

【讨论】:

  • mysql 和 oracle 是两个不同的世界。我一直在使用mysql。它确实需要您提交数据。但显然 Oracle 确实需要提交。
  • 在这种情况下,SQL*Plus 客户端工具的参数控制 EXIT 时的 AUTOCOMMIT。但一般来说,任何 DML 事务都应该显式提交。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
相关资源
最近更新 更多