天天看點

Oracle 與 MySQL 的差異分析(3):建立表和索引

Oracle 與 MySQL 的差異分析(3):建立表和索引

1.1 命名

l Oracle:

表名、字段名、索引名等,不能超過30個字元。

l MySQL:

資料庫、表名、列名,不能超過64個字元。

注意:MySQL 是大小寫敏感的,是以一般都用小寫。

1.2 主鍵和自增長列

MySQL 的主鍵和 Oracle 差不多,都是對應一個唯一索引并且索引列是非空的。

create table t_test1(abc intprimary key);

不過,MySQL 可以設定一個自增長列作為主鍵,而在Oracle 中一般用序列實作自增長列,序列和表之間沒有一一對應關系。

create table t_test2(idint primary key auto_increment, username varchar(100));

insert 時,如果不指定 id 或者 id 為 0 時,id 會自動加 1;如果指定一個較大的 id,那麼下次會從這個 id 繼續增長。

1.3 索引

整個資料庫中,MySQL 的索引是可以重名的,MySQL 索引是表級别的,但是 Oracle 索引是不可以重名的,它的索引是資料庫級别的。

由于 MySQL 索引的命名是表級别的,是以删除索引時也要指定表名。

create index ix_username ont_test3(username);

drop index ix_username ont_test3;

最常用的 B+ 樹索引,在 MySQL 中的特性 Oracle 是差不多的。

1.4 分區

從 5.1 版本開始,MySQL 支援分區表,與 Oracle 類似,支援 RANGE、LIST、HASH 區分,同時還支援二級分區。MySQL 分區表上建立的索引是本地索引,不支援全局索引,建立索引不需要 load 關鍵字。在分區表上一般不建立主鍵或唯一索引,如果要建立的話,需要包含分區列。

CREATE TABLE employees (
   id INT NOT NULL,
   fname VARCHAR(30),
   job_code INT NOT NULL,
   store_id INT NOT NULL
)
partition BY RANGE (store_id) (
   partition p0 VALUES LESS THAN(6),
   partition p1 VALUES LESS THAN(11),
   partition p2 VALUES LESS THAN(16),
   partition p3 VALUES LESS THAN(21),
);
create index ix_employees onemployees(frame);           

複制