Oracle数据库基本操作(和MySQL的类比操作)全局查询篇

Oracle数据库和MySQL数据库同属关系型数据库,因此,不管是查询还是修改,增加,删除操作总的是十分类似的,但细节处是不相同的。下面单独就数据库查询操作做一个大致总结,如有不对请指出。

查询操作不管是哪种数据库,都是从大往小查询,意思就是先查数据库里有哪些数据库,然后定位其中的一个数据库,查询它的拥有的表,然后定位其中的一个表,进而查询出最终的数据。

关系型数据库的一个体现是一个数据库会有很多用户,用户根据其所处的角色拥有不同的权限,进而有不同的显示和操作,例如,在MySQL中,如果某个用户只有对test这个数据库下的所有表查询权限,那么,用这个用户登陆数据库,将会仅仅看到前面所授权的数据库名称test和information_schema 这个数据库,并且只能查询test数据库下的表而不能更改数据库内的表,或者删除,增加。

select * from all_users;--所有用户 需要高级权限
select * from dba_roles;--所有角色  需要高级权限
SELECT GRANTEE,GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE ='HR';--用户hr所具有的角色
SELECT GRANTEE,PRIVILEGE FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SYS';--用户sys的系统权限
select name from v$database;--查看数据库库名
select dbid from v$database;--查看数据库id
select * from v$tablespace;--查看所有表空间  
select * from user_tables;--查看所有表

1,查询数据库内的所有用户

Oracle:select * from all_users; #查询结果为12个用户

查看所有角色:
        select * from dba_roles;(dba权限) #查询结果为32个角色

mysql:SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 或者 这个命令: select user from mysql.user;输出如下

mysql> select user from mysql.user;
+-----------+
| user      |
+-----------+
| admin     |
| root      |
| mysql.sys |
| root      |
+-----------+
4 rows in set (0.01 sec)

mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
+--------------------------------+
| query                          |
+--------------------------------+
| User: 'admin'@'%';             |
| User: 'root'@'%';              |
| User: 'mysql.sys'@'localhost'; |
| User: 'root'@'localhost';      |
+--------------------------------+
4 rows in set (0.00 sec)

以上输出,可以看到,现在只有四个用户,root用户具有远程连接的权限。

二,查询用户的权限

好了,经过第一步,我们使用超级管理员用户root查询到了所有的用户,这一步,可以帮助我们知道这些用户都有什么权限,从而知道应该在日常的工作中使用哪一个用户。

Oracle:

Oracle 数据库将权限分为系统权限和对象权限,因为权限过多一个一个授予用户比较繁琐,所以Oracle出了角色的概念,直接将角色授予用户就比较简便了,同时角色也可以拥有角色。

(1).查询用户SYS拥有的系统权限
SQL> SELECT GRANTEE,PRIVILEGE FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SYS';(dba权限)#SYS用户权势滔天,200多个系统权限

(2)查询scott用户拥有的对象权限
SQL> SELECT GRANTEE,TABLE_NAME,PRIVILEGE FROM DBA_TAB_PRIVS WHERE GRANTEE = 'SCOTT';(dba权限)

(3).查询scott用户拥有的角色
SQL> SELECT GRANTEE,GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE ='SCOTT';

MySQL

select * from mysql.user where user='root' \G  或者   show grants for 'root'@'%'; #查询root用户的权限,查询其它用户替换root即可。第二个命令基本是还原了授权命令,推荐使用第二个命令。输出如下:

mysql> show grants for 'root'@'%';
+-------------------------------------------------------------+
| Grants for root@%                                           |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

(歪一下,postgres数据库切换用户十分人性化,MySQL和Oracle并不太友好)。

三,查询有哪些数据库以及每个数据库有哪些表

Oracle

select name from v$database; #查询数据库的所有名称  基本等价于MySQL的 show databases; #就一个数据库 XE

select dbid from v$database; #查询数据库的所有id,XE这个数据库的ID为2941526500

 

由于Oralce没有库名,只有表空间,所以Oracle没有提供数据库名称查询支持,只提供了表空间名称查询。
select * from v$tablespace;    --查询表空间(需要一定权限)  #5个表空间

2.查询当前数据库中所有表名
select * from user_tables; #154张表

 

MySQL:

登陆用户后,执行命令: show databases; #查询该用户名下所有有权限使用的数据库,比如使用mysql这个数据库,   use mysql;show  tables; # 使用mysql 这个数据库,查看这个数据库的所有表 或者 show table status \G;查看表的详细信息,其中包括每个表的描述信息,所使用的引擎类型等等信息。

查看所有的全局变量,这些变量包括一些mysql的基本设置,比如慢查询这些的设置:

mysql> SHOW VARIABLES \G;
Variable_name: updatable_views_with_limit
        Value: YES
*************************** 502. row ***************************
Variable_name: version
        Value: 5.7.18
*************************** 503. row ***************************
Variable_name: version_comment
        Value: MySQL Community Server (GPL)
*************************** 504. row ***************************
Variable_name: version_compile_machine
        Value: x86_64
*************************** 505. row ***************************
Variable_name: version_compile_os
        Value: Linux
*************************** 506. row ***************************
Variable_name: wait_timeout
        Value: 28800
*************************** 507. row ***************************
Variable_name: warning_count
        Value: 0
507 rows in set (0.00 sec)

ERROR: 
No query specified

查看在服务器上的插件存放路径:(本机的存放路径是 /usr/lib/mysql/plugin)  

mysql> show variables like 'plugin_dir';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| plugin_dir    | /usr/lib/mysql/plugin/ |
+---------------+------------------------+
1 row in set (0.01 sec)

 

查看所有在使用的插件:

mysql> show plugins;
+----------------------------+----------+--------------------+---------+---------+
| Name                       | Status   | Type               | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐