我也使用了MY SQL和Oracle,但我有一个很大的困惑。 在oracle中,用户来自数据库或数据库。因为我使用sql命令在oracle中创建了一个新用户。然后我创建了表但我没有创建任何数据库,那么这些新表会在哪里发生?
我认为表与oracle中的用户相关联,就像创建表的人是表的所有者而没有其他用户可以访问表,因此无需先通过创建数据库然后在其下创建表来区分它们
但是在MYSQL中(使用PhpMyAdmin),首先我们必须创建一个数据库,然后在该数据库中我们必须创建表。
但是在oracle中我们只需要使用具有授予权限的有效用户登录,我们就可以在不创建数据库的情况下开始创建表。但这些数据库在哪个数据库中?
如果我们考虑MySQL的Java JDBC连接
连接con = DriverManager.getConnection(
“JDBC:MySQL的://本地主机:3306 / mydb的”, “USERNAME”, “密码”);
这里我们指定 mydb 作为数据库名称, 但是我们考虑了Oracle 11g xpress版的JDBC连接:
连接con = DriverManager.getConnection(
“JDBC:预言:瘦:@localhost:1521:XE”, “USERNAME”, “PWD”);
没有数据库名称提及它只包含ip,port,sid,用户名和密码,但我们仍然可以访问表名。
所以我的问题是oracle有什么问题?为什么我们不必指定数据库名称,是否不需要在oracle中创建数据库,默认数据库概念是否存在且足够?
正如我们可以看到jdbc连接语法没有提到数据库名称,所以我应该假设表可以根据哪个用户创建它而不是在哪个数据库下区分。 如果以上查询解决了...... 让我了解如何使用SQL命令查看当前用户下可用数据库的数量,在oracle中更改数据库的命令。
目前我正在使用Oracle 11g快递版
答案 0 :(得分:1)
简而言之。数据库是表示数据库的一堆物理文件的集合。与其他系统一样,将数据库视为备份和恢复的单位很方便。
你不会问一个实例。这本质上是一个服务器,服务器只能运行一个数据库。通常,数据库和实例是可以互换的,尽管"数据库"是指数据和"实例'是指连通性。
数据库本身包含模式,模式包含表,视图和存储过程等对象。架构可能看起来像"其他系统中的数据库,因为它们有一个名称并包含表。模式通常以用户命名,因为每个用户都有自己的命名空间。通常会授予用户特定于给定命名空间的权限。
也就是说,架构/命名空间是安全的一个单元,但不包括备份 / 还原。
因此,数据库包含用户。用户表示包含表的模式。用户可以在同一数据库中的模式内和模式之间拥有角色和权限。
而且,为了进一步混淆事物,用户可以在多个数据库之间共享,但这是另一回事。
答案 1 :(得分:1)
问:所以我的问题是,Oracle有什么问题?为什么我们不必指定数据库名称,是否不需要在oracle中创建数据库,默认数据库概念是否足够?"
答:在考虑"用户"的MySQL概念方面。和#34;数据库",将这些概念转换为Oracle ......
在Oracle中,那些是相同的东西。他们是同一个人。
在MySQL中,您可以使用数据库名称限定对表名的引用:
SELECT * FROM mydatabasename.mytablename ;
在Oracle中,我们可以使用"所有者"来限定表名。表:
SELECT * FROM mytableowner.mytablename ;
当我们引用一个tablename而没有在MySQL中对它进行限定时,它被解释为对当前数据库"中的表的引用。
在Oracle中,非限定表引用被解释为对表所拥有的表的引用"由当前用户。 (如果该名称的对象不归当前用户所有,则Oracle会在特殊的PUBLIC所有者下查找该名称的对象。)
增加混淆...... Oracle术语"数据库"与MySQL中的有很多不同的含义...... Oracle数据库与不是与MySQL数据库相同。
在Oracle中,要查看当前用户拥有的表,您可以查询USER_TABLES
视图。
要查看当前用户拥有权限的表(包括其他用户拥有的表),请查询ALL_TABLES
视图。此视图还会返回OWNER
列,其中显示拥有该表的用户。
如果当前用户具有SELECT_CATALOG_ROLE
权限,您可以查询DBA_TABLES
以查看所有用户拥有的所有表,无论您是否拥有这些表的权限。此视图还包含OWNER
列。
(USER_
,ALL_
和DBA_
的命名惯例适用于所有词典视图,而不仅仅是_TABLES
。
答案 2 :(得分:0)
我会说Oracle用户来自数据库。
数据库通常在Oracle Database软件安装期间创建。显然,您可以稍后创建它(例如,如果您只安装了软件)或添加另一个。
当您登录数据库时,使用:
sqlplus username/password@SID
SID标识数据库实例(数据库名称+实例编号)。例如,如果您的dbname是“mydatabase”并且实例编号是“1”,则SID是“mydatabase1”。
因此,当您稍后创建新表时,它属于您的用户,并且该用户属于该数据库。稍后您可以像这样选择此表:
select * from username.your_table_name;
使用JDBC连接进行连接时,也会给出SID:
jdbc:oracle:thin:@[HOST][:PORT]:[SID]