Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Oracle:数据库是属于用户还是用户属于数据库?_Java_Mysql_Database_Oracle - Fatal编程技术网

Java Oracle:数据库是属于用户还是用户属于数据库?

Java Oracle:数据库是属于用户还是用户属于数据库?,java,mysql,database,oracle,Java,Mysql,Database,Oracle,我也使用了SQL和Oracle,但我有一个很大的困惑。 在oracle中,用户属于数据库还是数据库属于用户。因为我已经使用sql命令在oracle中创建了一个新用户。然后我创建了表,但我没有创建任何数据库,那么新的表去了哪里 我猜表是与oracle中的用户关联的,就像创建表的人是表的所有者,没有其他用户可以访问表,因此无需先创建数据库,然后在其下创建表来区分它们 但是在MYSQL中(使用PhpMyAdmin),首先我们必须创建一个数据库,然后在该数据库中我们必须创建表 但在oracle中,我们只

我也使用了SQL和Oracle,但我有一个很大的困惑。 在oracle中,用户属于数据库还是数据库属于用户。因为我已经使用sql命令在oracle中创建了一个新用户。然后我创建了表,但我没有创建任何数据库,那么新的表去了哪里

我猜表是与oracle中的用户关联的,就像创建表的人是表的所有者,没有其他用户可以访问表,因此无需先创建数据库,然后在其下创建表来区分它们

但是在MYSQL中(使用PhpMyAdmin),首先我们必须创建一个数据库,然后在该数据库中我们必须创建表

但在oracle中,我们只需使用具有授权权限的有效用户登录,就可以开始创建表,而无需创建数据库。但是这些表放在哪个数据库中呢

如果考虑MySQL

的java jdbc连接 Connection con=DriverManager.getConnection(
“jdbc:mysql://localhost:3306/mydb“,”用户名“,”密码“)

这里我们指定了mydb作为数据库名称, 但是我们已经考虑了Oracle 11G XPress版本的JDBC连接:

Connection con=DriverManager.getConnection(
“jdbc:oracle:thin:@localhost:1521:xe”,“USERNAME”,“PWD”)

并没有提到数据库名称,它只包含ip、端口、sid、用户名和密码,但我们仍然能够访问表名

所以我的问题是甲骨文出了什么问题?为什么我们不必指定数据库名称,是否不需要在oracle中创建数据库,默认的数据库概念已经存在并且已经足够了

正如我们可以看到的jdbc连接语法中并没有提到数据库名称,所以我应该假设表可以根据创建它的用户来区分,而不是根据它所在的数据库。 如果上述查询已解决。。。 演示如何使用SQL命令查看当前用户下可用数据库的数量,该命令用于在oracle中更改数据库


目前我使用的是Oracle 11g速成版

我想说的是,在Oracle中,用户位于数据库之下

数据库通常在Oracle数据库软件安装期间创建。显然,您可以稍后创建它(例如,如果您只安装了软件)或添加另一个

当您登录到您使用的数据库时:

sqlplus username/password@SID
SID标识数据库实例(数据库名称+实例编号)。例如,如果您的数据库名为“mydatabase”,实例号为“1”,则SID为“mydatabase1”

因此,当您稍后创建新表时,它属于您的用户,而用户属于数据库。以后,您可以像这样选择此表:

select * from username.your_table_name;
当您使用JDBC连接进行连接时,也会给出SID:

jdbc:oracle:thin:@[HOST][:PORT]:[SID]

甲骨文在这方面可能有点混乱。这位老师很擅长解释这些概念

简而言之。数据库是一组表示数据库的物理文件的集合。与其他系统一样,可以方便地将数据库视为备份和恢复单元

你不需要问一个例子。这本质上是一个服务器,服务器只能运行一个数据库。通常,数据库和实例是可互换的,尽管“数据库”指的是数据,“实例”指的是连接性

数据库本身包含模式,模式包含表、视图和存储过程等对象“其他系统中的数据库,因为它们有名称并包含表。模式通常以用户命名,因为每个用户都有自己的名称空间。用户通常被授予特定于给定名称空间的特权

也就是说,架构/名称空间是安全单元,而不是备份/恢复单元

因此,数据库包含用户。用户表示包含表的模式。用户可以在同一数据库的模式内或模式间拥有角色和权限


而且,为了进一步混淆问题,用户可以在多个数据库之间共享,但这是另一回事。

Q:所以我的问题是,Oracle有什么问题?为什么我们不必指定数据库名称,是否不需要在oracle中创建数据库,默认的数据库概念已经存在并且已经足够了?”

A:在考虑MySQL的“用户”和“数据库”概念时,将这些概念转换为Oracle

在甲骨文中,这些都是同一件事,它们是同一件事中的一件

在MySQL中,可以使用数据库名称限定对表名的引用:

SELECT * FROM mydatabasename.mytablename ;
在Oracle中,我们可以使用表的“所有者”限定表名:

SELECT * FROM mytableowner.mytablename ;
当我们引用一个表名而不在MySQL中限定它时,它被解释为对“当前数据库”中的表的引用

在Oracle中,非限定表引用被解释为对当前用户“拥有”的表的引用。(如果该名称的对象不属于当前用户,则Oracle会在特殊公共所有者下查找该名称的对象。)


更让人困惑的是,Oracle术语“数据库”的含义与MySQL中的含义大不相同……Oracle数据库与MySQL数据库不同


在Oracle中,要查看当前用户拥有的表,可以查询
user\u表
视图

要查看当前用户对其具有权限的表,包括其他用户拥有的表,请查询
ALL_tables
视图。此视图还返回一个
OWNER
列,显示拥有该表的用户

如果当前用户具有
SELECT\u CATALOG\u ROLE
权限,则可以查询
DBA\u TABLES
以查看所有用户拥有的所有表,无论您是否具有这些表的权限。此视图还包括
OWNER

(修订)