MySQL和Oracle的添加字段的处理差别(2)

Oracle中是按照这个column_id来进行字段的顺序管理的。关于字段有两个很相似的数据字典dba_tab_cols,tab_tab_columns。
 里面很重要的一个属性就是column_id,同时也能够看出还有数据类型为Long的字段 DATA_DEFAULT ,这也算是Oracle为此问题付出的一个代价,为了保持兼容性,这个long类型的字段到了12c依旧是如此。
SQL> desc dba_tab_columns
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
 OWNER                                    NOT NULL VARCHAR2(30)
  TABLE_NAME                                NOT NULL VARCHAR2(30)
  COLUMN_NAME                              NOT NULL VARCHAR2(30)
  DATA_TYPE                                          VARCHAR2(106)
  DATA_TYPE_MOD                                      VARCHAR2(3)
  DATA_TYPE_OWNER                                    VARCHAR2(60)
  DATA_LENGTH                              NOT NULL NUMBER
  DATA_PRECISION                                    NUMBER
  DATA_SCALE                                        NUMBER
  NULLABLE                                          VARCHAR2(1)
  COLUMN_ID                                          NUMBER
  DEFAULT_LENGTH                                    NUMBER
  DATA_DEFAULT                                      LONG
  NUM_DISTINCT                                      NUMBER

而如果对一个大表添加字段,如果涉及默认值,那就工作就很难了,除此之外添加字段方面,Oracle处理起来还是要好很多,至少不会重建表数据。这也算是两者在设计上的一些差别吧。而对于Oracle可以有不少的诊断方式,对于MySQL似乎方式和手段就少了一些,不过也有几种方式,

比如验证MySQL对于添加字段,修改数据类型,可以查看show processlist,找到一个线程会标示copy to tmp table

而同时在数据目录下会创建两个临时文件,类似下面的形式。

-rw-rw---- 1 mysql mysql        8860 Nov  4 19:15 #sql-2721_17a3a9.frm

-rw-rw---- 1 mysql mysql  549453824 Nov  4 19:16 #sql-2721_17a3a9.ibd

而更进一步想看到更多的内容,那就是源代码了,其实还好了,已经看到有些牛人在解析这部分的内容了,不过我得自己读一读,消化一下,才能拿出来。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/936526d129ba4474327162fc9dcaa525.html