跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

MySQL和Oracle对比学习之数据字典元数据

MySQL和Oracle虽然在架构上有很大的不同,但是如果从某些方面比较起来,它们有些方面也是相通的。毕竟学习的主线是MySQL,所以会mysql和oracle虽然在架构上有很大的不同,但是如果从某些方面比较起来,它们有些方面也是相通的。

毕竟学习的主线是mysql,所以会从mysql的角度来对比oracle的一些功能。

大体总结了以下的内容,欢迎大家拍砖,查看当前的数据库名mysql> select database();+------------+| database() |+------------+| test         |+------------+1 row in set (0.00 sec)+++ oracle的实现方法 ++++因为架构的不同,所以列举了数据库,实例级的查询方法。

方法一,通过数据库参数来查看sql> show parameter instance_name name                                 type                              value------------------------------------ --------------------------------- ------------------------------instance_name                        string                            truabp4方法二:通过数据字典来查看数据库级sql> select name from v$database;name---------------------------truabp4实例级sql> select instance_name from v$instance;instance_name------------------------------------------------truabp4方法三:通过内置函数来实现,这种方法相比前两种更为通用。

sql> select sys_context('userenv','instance_name') from dual;sys_context('userenv','instance_name')----------------------------------------------------truabp4得到数据库创建的脚本得到数据库名为mysql的创建脚本,,毕竟在架构实现上不同,有点类似oracle中的用户级别。

mysql> show create database mysql;+----------+------------------------------------------------------------------+| database | create database                                                  |+----------+------------------------------------------------------------------+| mysql    | create database `mysql` /*!40100 default character set latin1 */ |+----------+------------------------------------------------------------------+1 row in set (0.00 sec)+++ oracle的实现方法 ++++oracle中的实现方式相比要复杂很多。叫法一样,但是实现还是有很大的差别。

create database mynewdb user sys identified by pz6r58 user system identified by y1tz5p logfile group 1 ('/u01/oracle/oradata/mynewdb/redo01.log') size 100m,group 2 ('/u01/oracle/oradata/mynewdb/redo02.log') size 100m,group 3 ('/u01/oracle/oradata/mynewdb/redo03.log') size 100m maxlogfiles 5 maxlogmembers 5 maxloghistory 1 maxdatafiles 100 maxinstances 1 character set us7ascii national character set al16utf16 datafile '/u01/oracle/oradata/mynewdb/system01.dbf' size 325m reuse extent management local sysaux datafile '/u01/oracle/oradata/mynewdb/sysaux01.dbf' size 325m reuse default temporary tablespace tempts1 tempfile '/u01/oracle/oradata/mynewdb/temp01.dbf'size 20m reuse undo tablespace undotbs datafile '/u01/oracle/oradata/mynewdb/undotbs01.dbf'size 200m reuse autoextend on maxsize unlimited;查看当前的用户mysql> select user();+----------------+| user()         |+----------------+| root@localhost |+----------------+1 row in set (0.00 sec)+++ oracle的实现方法 ++++方法一,通过sql*plus中的show user命令杰克得到sql> show user user is "n1"方法二:通过内置函数来实现,比较通用的方式。

sql> select sys_context('userenv','current_user') from dual;sys_context('userenv','current_user')--------------------------------------------------n1查看含有的表信息mysql> show tables;+---------------------------+| tables_in_mysql           |+---------------------------+| columns_priv              || db                        || event                     || func                      || general_log               || help_category             || time_zone_transition_type || user                      |+---------------------------+28 rows in set (0.00 sec)+++ oracle的实现方法 ++++方法一:通过cat同义词来实现sql> select *from cat where rownumtable_name                tabtype------------------ ---------------------aaa                  table aaaa                 table方法二:通过tab同义词来实现sql> select *from tab where rownumtname                tabtype                clusterid------------------ --------------------- ----------aaa                  table aaaa                 table方法三:通过数据字典user_tables来实现sql> select table_name from user_tables where rownumtable_name------------------aaa aaaa查看指定数据库中的表信息比如查询数据库名为mysql里面含有的表。

mysql> show tables from mysql;+---------------------------+| tables_in_mysql           |+---------------------------+| columns_priv              || db                        || event                     || func                      || general_log               || help_category             || help_keyword              || help_relation             || time_zone_transition_type || user                      |+---------------------------+28 rows in set (0.00 sec)+++ oracle的实现方法 ++++oracle中的实现还是根据数据字典表*_tables sql> select table_name from all_tables where owner='refwork';table_name------------------------------offer查看test数据库中的表temp结构>mysqlshow test temp database: test  table: temp+---------+-------------+-----------------+------+-----+---------+--------------| field   | type        | collation       | null | key | default | extra+---------+-------------+-----------------+------+-----+---------+--------------| id      | int(11)     |                 | no   | pri |         | auto_incremen| char    | char(50)    | utf8_general_ci | no   | mul |         || varchar | varchar(50) | utf8_general_ci | no   | mul |         || text    | text        | utf8_general_ci | no   | mul |         |+---------+-------------+-----------------+------+-----+---------+--------------+++ oracle的实现方法 ++++可以通过all_tab_cols来实现select table_name,column_name from all_tab_cols where owner='n1' and table_name='test';查看表的建表语句mysql> show create table event\g*************************** 1. row ***************************table: event create table: create table `event` (`db` char(64) character set utf8 collate utf8_bin not null default '',`name` char(64) not null default '',`body` longblob not null,`definer` char(77) character set utf8 collate utf8_bin not null default '',`execute_at` datetime default null,`body_utf8` longblob,primary key (`db`,`name`)) engine=myisam default charset=utf8 comment='events'1 row in set (0.00 sec)+++ oracle的实现方法 ++++oracle中一直直观的方式是使用dbms_metadata.get_ddl来实现sql> select  dbms_metadata.get_ddl(object_type=>'table',name=>'csm_offer')from dual dbms_metadata.get_ddl(object_type=>'table',name=>'csm_offer')--------------------------------------------------------------------------------create table "refwork"."offer"(    "owner" varchar2(30) not null enable,"object_name" varchar2(30) not null enable,"subobject_name" varchar2(30),"object_id" number not null enable,"data_object_id" number,"object_type" varchar2(19),"created" date not null enable,"last_ddl_time" date not null enable,"timestamp" varchar2(19)...

得到表结构的信息mysql> desc columns_priv-> ;+-------------+----------------------------------------------+------+-----+-----| field       | type                                         | null | key | defa+-------------+----------------------------------------------+------+-----+-----| host        | char(60)                                     | no   | pri || db          | char(64)                                     | no   | pri || user        | char(16)                                     | no   | pri || table_name  | char(64)                                     | no   | pri || column_name | char(64)                                     | no   | pri || timestamp   | timestamp                                    | no   |     | curr| column_priv | set('select','insert','update','references') | no   |     |+-------------+----------------------------------------------+------+-----+-----7 rows in set (0.01 sec)+++ oracle的实现方法 ++++这一点完全一样sql> desc offer name                                      null?    type----------------------------------------- -------- ----------------------------owner                                     not null varchar2(30) object_name                               not null varchar2(30) subobject_name                                     varchar2(30) object_id                                 not null number data_object_id                                     number object_type                                        varchar2(19) created                                   not null date last_ddl_time                             not null date timestamp                                          varchar2(19) status                                             varchar2(7) temporary                                          varchar2(1) generated                                          varchar2(1) secondary                                          varchar2(1)得到表中的列信息mysql> show columns from columns_priv;+-------------+----------------------------------------------+------+-----+-----| field       | type                                         | null | key | defa+-------------+----------------------------------------------+------+-----+-----| host        | char(60)                                     | no   | pri || db          | char(64)                                     | no   | pri || user        | char(16)                                     | no   | pri || table_name  | char(64)                                     | no   | pri || column_name | char(64)                                     | no   | pri || timestamp   | timestamp                                    | no   |     | curr| column_priv | set('select','insert','update','references') | no   |     |+-------------+----------------------------------------------+------+-----+-----7 rows in set (0.01 sec)+++ oracle的实现方法 ++++通过user_tab_cols来实现。

sql> select column_name from user_tab_cols where table_name='offer';column_name------------------------------owner object_name subobject_name object_id data_object_id object_type created last_ddl_time得到索引的信息mysql> show index from columns_priv;+--------------+------------+----------+--------------+-------------+-----------| table        | non_unique | key_name | seq_in_index | column_name | collation+--------------+------------+----------+--------------+-------------+-----------| columns_priv |          0 | primary  |            1 | host        | a| columns_priv |          0 | primary  |            2 | db          | a| columns_priv |          0 | primary  |            3 | user        | a| columns_priv |          0 | primary  |            4 | table_name  | a| columns_priv |          0 | primary  |            5 | column_name | a+--------------+------------+----------+--------------+-------------+-----------5 rows in set (0.00 sec)+++ oracle的实现方法 ++++通过user_indexes来实现sql> select index_name,index_type from user_indexes where table_name='offer';index_name                     index_type------------------------------ ---------------------------inx_offer                      normal基于列的模糊查找可能在这方面mysql提供的直观方式要多一些。

mysql> show columns from columns_priv like '%ab%';+------------+----------+------+-----+---------+-------+| field      | type     | null | key | default | extra |+------------+----------+------+-----+---------+-------+| table_name | char(64) | no   | pri |         |       |+------------+----------+------+-----+---------+-------+1 row in set (0.01 sec)+++ oracle的实现方法 ++++oracle里面还是用user_tab_cols,一用倒底。

sql> select column_name from user_tab_cols where table_name='offer' and column_name like '%obje%';column_name------------------------------object_name subobject_name object_id data_object_id object_type精确查找列名mysql> show columns from columns_priv where field='user';+-------+----------+------+-----+---------+-------+| field | type     | null | key | default | extra |+-------+----------+------+-----+---------+-------+| user  | char(16) | no   | pri |         |       |+-------+----------+------+-----+---------+-------+1 row in set (0.01 sec)+++ oracle的实现方法 ++++还是使用usre_tab_cols,一用倒底。

sql> select column_name from user_tab_cols where table_name='offer' and column_name= 'object_name';column_name------------------------------object_name查看进程相关的信息mysql> show processlist-> ;+----+------+-----------------+-------+---------+------+-------+----------------| id | user | host            | db    | command | time | state | info+----+------+-----------------+-------+---------+------+-------+----------------|  3 | root | localhost:49479 | mysql | query   |    0 | init  | show processlis+----+------+-----------------+-------+---------+------+-------+----------------1 row in set (0.00 sec)+++ oracle的实现方法 ++++oracle中提供了比较全面的视图,可以通过v$session,v$process来查找username                       machine              program                   sid------------------------------ -------------------- ------------------------- ----------refwork                     rac1                 sqlplus@rac1 (tns v1-v3)  257 select *from v$process;查数据字典的信息mysql中的数据字典信息都包含在schema information_schema里面>mysqlshow information_schema database: information_schema+---------------------------------------+|                tables                 |+---------------------------------------+| character_sets                        || collations                            || collation_character_set_applicability || columns                               || column_privileges                     || engines                               || events                                || files                                 || global_status                         || global_variables                      || key_column_usage                      || optimizer_trace                       || parameters                            || partitions                            || plugins                               || processlist                           || profiling                             || referential_constraints               || routines                              |+---------------------------------------++++ oracle的实现方法 ++++oracle中的视图更加丰富,除了常说的数据字典表,还有动态性能视图,调优诊断很是方便。

select *from dict;  --数据字典表select *from v$fixed_table;--动态性能视图表

本文永久更新链接地址:

相关文章