mysql和oracle建表語句以及數據類型的區別


1、mysql和oracle建表語句的區別

mysql

DROP TABLE IF EXISTS `order`;
CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `number` varchar(255) NOT NULL COMMENT '工單編號',
  `applicant` varchar(255) NOT NULL COMMENT '工單申請人',
  `state` int(1) NOT NULL COMMENT '工單狀態',
  `count` int(4) NOT NULL COMMENT '個數',
  `ctime` varchar(255) NOT NULL,
  `depart` varchar(255) NOT NULL COMMENT '部門',
  `projectname` varchar(255) NOT NULL COMMENT '項目名稱',
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;

 

oracle

---創建表
create table ZHANGSAN.ORDER 
(
  id           NUMBER not null,
  number    VARCHAR2(255),
  applicant VARCHAR2(255),
  state     NUMBER(1),
  count     NUMBER(6),
  ctime     VARCHAR2(30),
  depart    VARCHAR2(255),
  projectname  VARCHAR2(255)
)

---為每一行添加注釋
comment on column ZHANGSAN.ORDER.number
  is '工單編號';
comment on column ZHANGSAN.ORDER.applicant
  is '工單申請人';
comment on column ZHANGSAN.ORDER.state
  is '工單狀態';
comment on column ZHANGSAN.ORDER.count
  is '個數';
comment on column ZHANGSAN.ORDER.ctime
  is '創建時間';
comment on column ZHANGSAN.ORDER.depart
  is '部門';
comment on column ZHANGSAN.ORDER.projectname
  is '項目名稱';
  
  
---指定主鍵  
alter table ZHANGSAN.ORDER
  add constraint ID primary key (ID)
  using index 
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255;

2、數據類型的區別:

mysql基本數據類型:

1)數值型:

優化建議:

 建議使用 TINYINT 代替 ENUM、BITENUM、SET。
避免使用整數的顯示寬度,也就是說,不要用INT(10)類似的方法指定字段顯示寬度,直接用INT。
DECIMAL最適合保存准確度要求高,而且用於計算的數據,比如價格。但是在使用DECIMAL類型的時候,注意長度設置。
 建議使用整形類型來運算和存儲實數,方法是,實數乘以相應的倍數后再操作。
 整數通常是最佳的數據類型,因為它速度快,並且能使用AUTO_INCREMENT

 

2)日期和時間型:

優化建議:

MySQL能存儲的最小時間粒度為秒。
建議用DATE數據類型來保存日期。MySQL中默認的日期格式是yyyy-mm-dd。
用MySQL的內建類型DATE、TIME、DATETIME來存儲時間,而不是使用字符串。
當數據格式為TIMESTAMP和DATETIME時,可以用CURRENT_TIMESTAMP作為默認(MySQL5.6以后), MySQL會自動返回記錄插入的確切時間。
TIMESTAMP是UTC時間戳,與時區相關。
DATETIME的存儲格式是一個YYYYMMDD HH:MM:SS的整數,與時區無關
除非有特殊需求,否則建議使用TIMESTAMP,它比DATETIME更節約空間

3)字符串型:

 

優化建議:

  1. 字符串的長度相差較大用VARCHAR;字符串短,且所有值都接近一個長度用CHAR。
  2.  BINARY和VARBINARY存儲的是二進制字符串,與字符集無關。
  3. BLOB系列存儲二進制字符串,與字符集無關。
  4. TEXT是一個更大的VARCHAR。
  5. BLOB和TEXT都不能有默認值。

Oracle的基本數據類型

1)字符串類型

字符串數據類型還可以依據存儲空間分為固定長度類型(CHAR/NCHAR) 和可變長度類型(VARCHAR2/NVARCHAR2)兩種.

    所謂固定長度:是指雖然輸入的字段值小於該字段的限制長度,但是實際存儲數據時,會先自動向右補足空格后,才將字段值的內容存儲到數據塊中。這種方式雖然比較浪費空間,但是存儲效率較可變長度類型要好。同時還能減少數據行遷移情況發生。

所謂可變長度:是指當輸入的字段值小於該字段的限制長度時,直接將字段值的內容存儲到數據塊中,而不會補上空白,這樣可以節省數據塊空間。

1.1:CHAR類型 CHAR(size [BYTE | CHAR])

CHAR類型,定長字符串,會用空格填充來達到其最大長度。非NULL的CHAR(12)總是包含12字節信息。CHAR字段最多可以存儲2,000字節的信息。如果創建表時,不指定CHAR長度,則默認為1。另外你可以指定它存儲字節或字符,例如 CHAR(12 BYTYE) CHAR(12 CHAR).一般來說默認是存儲字節,你可以查看數據庫參數

NLS_LENGTH_SEMANTICS的值。

注意:數據庫的NLS_CHARACTERSET 為AL32UTF8,即一個漢字占用三到四個字節。如果NLS_CHARACTERSET為ZHS16GBK,則一個字符占用兩個字節。

 

1.2: NCHAR類型

這是一個包含UNICODE格式數據的定長字符串。NCHAR字段最多可以存儲2,000字節的信息。它的最大長度取決於國家字符集。另外查詢時,如果字段是NCHAR類型,則需要如下書寫

SELECT translated_description FROM product_descriptions

WHERE translated_name = N'LCD Monitor 11/PM';

1.3 VARCHAR類型

不要使用VARCHAR數據類型。使用VARCHAR2數據類型。雖然VARCHAR數據類型目前是VARCHAR2的同義詞,VARCHAR數據類型將計划被重新定義為一個單獨的數據類型用於可變長度的字符串相比,具有不同的比較語義。

1.4: VARCHAR2類型

變長字符串,與CHAR類型不同,它不會使用空格填充至最大長度。VARCHAR2最多可以存儲4,000字節的信息。

1.5: NVARCHAR2類型

這是一個包含UNICODE格式數據的變長字符串。 NVARCHAR2最多可以存儲4,000字節的信息。

 

2)數字類型

2.1 NUMBER類型

NUMBER(P,S)是最常見的數字類型,可以存放數據范圍為10^130~10^126(不包含此值),需要1~22字節(BYTE)不等的存儲空間。

P 是Precison的英文縮寫,即精度縮寫,表示有效數字的位數,最多不能超過38個有效數字

S是Scale的英文縮寫,可以使用的范圍為-84~127。Scale為正數時,表示從小數點到最低有效數字的位數,它為負數時,表示從最大有效數字到小數點的位數

下面是官方文檔的示例

2.2 INTEGER類型

INTEGER是NUMBER的子類型,它等同於NUMBER(38,0),用來存儲整數。若插入、更新的數值有小數,則會被四舍五入。

Oracle 數據庫提供了專為浮點數的兩種數值數據類型:

2.3 浮點數

BINARY_FLOAT

BINARY_FLOAT 是 32 位、 單精度浮點數字數據類型。可以支持至少6位精度,每個 BINARY_FLOAT 的值需要 5 個字節,包括長度字節。

BINARY_DOUBLE

BINARY_DOUBLE 是為 64 位,雙精度浮點數字數據類型。每個 BINARY_DOUBLE 的值需要 9 個字節,包括長度字節。

在數字的列中,浮點數有小數精度。在 BINARY_FLOAT 或 BINARY_DOUBLE 的列中,浮點數有二進制的精度。二進制浮點數支持的特殊值無窮大和 NaN (不是數字)。

您可以指定列在表 2-4 范圍內的浮點數。"數字文本"中定義了用於指定浮點數的格式。

Table 2-3 Floating Point Number Limits

2.4 FLOAT類型

FLOAT類型也是NUMBER的子類型。

Float(n),數 n 指示位的精度,可以存儲的值的數目。N 值的范圍可以從 1 到 126。若要從二進制轉換為十進制的精度,請將 n 乘以 0.30103。要從十進制轉換為二進制的精度,請用 3.32193 乘小數精度。126 位二進制精度的最大值是大約相當於 38 位小數精度。

 

 3)日期類型

日期類型用於存儲日期數據,但是並不是使用一般的格式(2012-08-08)直接存儲到數據庫的。

3.1 DATE類型

DATE是最常用的數據類型,日期數據類型存儲日期和時間信息。雖然可以用字符或數字類型表示日期和時間信息,但是日期數據類型具有特殊關聯的屬性。為每個日期值,Oracle 存儲以下信息: 世紀、 年、 月、 日期、 小時、 分鍾和秒。一般占用7個字節的存儲空間。

3.2 TIMESTAMP類型

這是一個7字節或12字節的定寬日期/時間數據類型。它與DATE數據類型不同,因為TIMESTAMP可以包含小數秒,帶小數秒的TIMESTAMP在小數點右邊最多可以保留9位

3.3 TIMESTAMP WITH TIME ZONE類型

這是TIMESTAMP類型的變種,它包含了時區偏移量的值

3.4 TIMESTAMP WITH LOCAL TIME ZONE類型

3.5 INTERVAL YEAR TO MOTH

3.6 INTERVAL DAY TO SECOND

 

參考:

https://blog.csdn.net/qq_27648991/article/details/80411566

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM