首頁  >  文章  >  資料庫  >  如何理解MySQL中的資料類型概念?

如何理解MySQL中的資料類型概念?

坏嘻嘻
坏嘻嘻原創
2018-09-15 11:15:011738瀏覽

這篇文章帶給大家的內容是關於如何理解MySQL中的資料類型概念,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

一、數據是什麼?

資料是一個資訊集合,以某種資料類型保存在資料庫裡。數據包括姓名、數字、貨幣、文字、圖像、小數、計算、統計等,幾乎涵蓋任何能夠想像的東西。資料客戶保存為大寫、小寫或大小寫混合,資料可以操作或修改,大多數資料在其生存週期中不會保持不變。

資料類型用於指定列所包含資料的規則,它決定了資料保存在列裡的方式,包括分配給列的寬度,以及值是否可以是字母、數字、日期和時間等。任何資料或資料的組合都有對應的資料類型,這些資料類型用於儲存像字母、數字、日期和時間、影像、二進位資料等。更詳細地說,數據可以包括姓名、描述、數字、計算、圖像、圖像描述、文件等。

資料是資料庫的意義所在,必須受到保護。資料的保護著就是資料庫管理員(DBA),但是每個資料庫使用者也有責任採取必要手段來保護資料。

二、基本資料型別

資料型別是資料本身的特徵,其特性被設定到表裡的欄位。舉例來說,我們可以指定某個欄位必須包含數字值,不允許輸入由數字或字母組成的字串;我們也不希望在儲存貨幣數值的欄位輸入字母。為資料庫裡每個欄位定義資料類型可以大幅減少資料庫裡由於錯誤而產生的錯誤資料。欄位定義(資料類型定義)是一種資料校驗方式,通知了每個欄位裡可以輸入的資料。

1.定長字串。

定長字串通常具有相同的長度,是使用定長資料類型保存的。以下是Sql定長字串的標準:

CHARACTER(n)

n是一個數字,定義了欄位裡能夠保存的最多字元數。

有些Sql實作使用CHAR資料型別來保存定長資料。字母可以保存到這種資料類型裡。

在定長資料型別裡,通常會使用空格來補充數量不足的字元。如果字元長度是10,而輸入的資料只有5位,那麼剩餘5位元就會被記錄為空格。填充空格確保了欄位裡每個值都具有相同的長度。

PS:不要使用定長資料類型來保存長度不定的數據,例如姓名,如果不恰當地使用定長資料類型,可能會導致浪費可用空間,以及影響對不同的資料進行精確比較。應該使用變長資料類型來保存長度不定的字串,從而節省資料庫空間。

2.變長字串。

Sql支援變長字串,也就是長度不固定的字串。以下是Sql變長字串的標準:

CHARACTER VARYING(n)

#n是一個數字,表示欄位裡能夠保存的最多字元數。

常見的變長字串資料型別有VARCHAR、VARINARY和VARCHAR2。 VARCHAR是ANSI標準,Microsoft Sql Server和MySql也使用它;VARINARY和VARCHAR2都是由Oracle使用的。定義為字元的欄位可以保存數字和字母,這表示資料中可能包含數字字元。 VARBINARY類似VARCHAR和VARCHAR2,只是它包含的是長度不定的位元組。這種數據類型通常被用來保存數位式數據,例如影像檔案。

定長資料型別利用空格來填滿欄位裡的空白,但變長字串不會這麼做。舉例來說,如果某個變長欄位的長度定義為10,而輸入的字串長度為5,那麼這個值的總長度也就是5,這時並不會使用空格來填滿欄位裡的空白。

3.大物件類型。

有些變長資料類型需要保存更長的數據,超過了一般情況下為VARCHAR欄位所保留的長度,例如現在常見的BLOB和TEXT資料類型。這些資料類型專門用於保存大數據集的。 BLOB是二進位大對象,它的資料是很長的二進位字串。 BLOB適合在資料庫中儲存二進位媒體文件,例如圖像和MP3.

TEXT資料類型是一種長字串類型,可以被看作一個大VARCHAR字段,通常用於在資料庫中保存大字符集,例如部落格網站的HTML輸入。在資料庫裡保存這種類型的資料可以實現網站的動態更新。

4.數值型別。

數值被保存在定義為某種數值類型的欄位裡,一般包括NUMBER、INTERGER、REAL/DECIMAL等。

蝦米是Sql數值的標準:

(1).BIT(n);

(2).BIT VARYING(n);

# (3).DECIMAL(p,s);

(4).INTEGER;

(5).SMALLINT;

(6).SIGINT;

(7).FLOAT(p,s);

(8).DOUBLE PRECISION(P,S);

(9).REAL(S);

P 表示欄位的最大長度。 s 表示小數點後面的位數。

Sql實作中一個通用的數值型別是NUMERIC,它符合ANSI標準。數值可以是0、正數、定點數和浮點數。以下是使用NUMERIC的範例:

NUMERIC(s),這個指令把字段能夠接受的最大值限制為99 999.在本書範例所涉及的資料庫實現總,NUMERIC都是以DECIMAL類型實現的。

5.小數型。

小數型別是數值的總體長度。舉例來說,在數值定義ZDECIMZAL(4,2)裡,有效位數是4,也就是說數值總位數是4.標度是小數點後面的位數,在前例中是2。如果實際數值的小數位數超過了定義的位數,則數值就會被四捨五入,例如34.33寫入到定義為DECIMAL(3,1)的欄位時,會被四捨五入34.3。

如果數值依照下列方式定義,其最大值就是99.99:

DECIMAL(4,2)

有效位元是4,表示數值的總體長度是4 ;標度是2,表示小數點後面保留2位。小數點本身並不算一個字元。

定義為DECIMAL(4,2)的欄位允許輸入的陣列包括:

(1).12

(2).12.4

# (3).12.44

(4).12.449

最後一個值12.449在儲存到欄位時會四捨五入為12.45。在這種定義,任何12.45~12.499之間的數值會被四捨五入為12.45。

6.整數。

整數是不包含小數點的數值(包括正數和負數)。

下面是一些有效的整數:

(1).1;

#(2).0;

(3).-1;

(4).99;

(5).-99;

(6).199;

7.浮點數。

浮點數是有效位數和標度都可變且沒有限制的小數數值,任何有效位數和標度都是可以的。資料型態REAL代表單一精確度浮點數值,而DOUBLE PRECISION表示雙精確度浮點數值。單精確度浮點數值的有效位數為1~21(包含),雙精確度浮點數值的有效位數為22~53(含)。以下是一些FLOAT資料型別的範例:

(1).FLOAT;

#(2).FLOAT(15);

(3).FLOAT(50) ;

8.日期和時間類型。

日期和時間資料類型很顯然是用來保存日期和時間資訊的。標準Sql支援DATETIME資料型別,它包含下列型別:

(1).DATE;

(2).TIME;

(3).DATETIME;

(4).TIMESTAMP;

DATETIME資料型別的元素包括:

(1).YEAR;

(2).MONTH;

(3).DAY;

(4).HOUR;

(5).SECOND;

ps:SECOND元素還可以再分解為幾分之一秒,其範圍是00.000~61.999,但並非所有Sql實作都支援這個範圍。多出來的1.999秒是用來實現閏秒的。
每種Sql實作可能都是具有自訂的資料類型來保存日期和時間。前面介紹的資料類型和元素是每個Sql廠商都應該遵守的標準,但大多數實作都具有自己的資料類型來保存日期值,其形式與實際儲存方式有所不同。

日期資料一般不指定長度。稍後我們會更詳細地介紹日期類型,包括日期資訊在某些實現中的保存方式、如何使用轉換函數操作日期和時間,並且用範例展示在實際工作中如何使用日期和時間。

9.直義字串。

直義字串就是一系列字符,例如姓名或電話號碼,這是有用戶或程式明確指定的。直義字串包含的資料與前面介紹的資料型別具有相同的屬性,但字串的值是已知的。列本身的值通常是不能決定的,因為每一列通常包含了欄位在全部記錄中的不同值。

其實並不需要把欄位指定為直義字串資料類型,而是指定字串。直義字串的範例如下所示:

(1).'Hello';

(2).45000;

(3).'45000';

(4).3.14;

(5).'November 1 ,1997';

字元型的字串由單引號包圍,數值45000沒有單引號包圍,而第二個45000用雙引號包圍了。一般來說,字元型字串需要使用單引號,而數值型不需要。

將一個資料類型成數值類型的過程過程術語隱含轉換。在這個過程中,資料庫會自動判斷應該使用哪種資料類型。所以,如果一個資料沒有使用單引號包圍起來,那麼Sql程式就會將其認定為數值類型。因此,必須特別留意數據的形式。否則,儲存結果可能會出現偏差,或報錯。稍後將介紹如何在資料庫查詢中使用直義字串。

10.NULL資料型別。

NULL值表示沒有值。 NULL值在Sql裡有廣泛的應用,包括表格的建立、查詢的搜尋條件,甚至是直義字串。

在使用NULL資料類型時,需要明確表示對應欄位不是必須要輸入資料的。如果某個欄位必須包含數據,就把它設為NOT NULL,只要欄位有可能不包含數據,最好就把它設為NULL。

11.布林值。

布林值的取值範圍是TRUE、FlASE和NULL,用來進行資料比較。舉例來說,在查詢中設定條件時,每個條件都會被求值,得到TRUE、FLASE或NULL。如果查詢中所有條件的值都是TRUE,資料就會被傳回;如果某個條件的值是FLASE或NULL,資料就不會回傳。例如下面這個範例:

WHERE NAME =‘SMITH’

這可能是查詢裡的一個條件,目標表裡每行資料都是根據這個條件求值。如果表裡某行的NAME欄位值是SMITH,條件的值就是TRUE,對應的記錄就會被傳回。

大多數資料庫實作並沒有一個嚴格意義上的BOOLEAN類型,而是代之以各自不同的實作方法。 MySql用於BOOLEAN類型,但實質上與其現有的TINYINT類型相同。 Oracle傾向於讓使用者使用一個CHAR(1)值來取代布林值,而Sql Server則使用BIT來取代。

12.自訂類型。

自訂類型是由使用者定義的類型,它允許使用者根據現有的資料類型來自訂自己的資料類型,從而滿足資料儲存的需求。自訂類型極大的豐富了資料儲存的可能性,使開發人員在資料庫程式開發過程中具有更大的靈活性。語句CREATE TYPE用於建立自訂類型。

舉例來說,在MySql和Oracle中,可以像下面這樣建立一個型別:

CREATE TYPE PERSON ASOBJECT

(NAME VARCHER (30),

SSN  VARCHAR(9);

)

然後可以像下面這樣引用自訂類型:

CREATE TABLE EMP_PAY

# (EMPLOYEE PERSON,

 SALARY DECIMAL(10,2),

HIRE_DATE DATE);

表EMP_PAY第一列EMPLOYEE的類型是PERSON,這正是在前面建立的自訂類型。

13.域。

域是能夠被使用的有效資料型別的集合。域與資料相關聯,從而只接受特定的資料。在網域建立之後,我們可以向網域新增約束。約束與資料類型共同發揮作用,從而進一步限製字段能夠接受的數據。域的使用類似於自訂類型。

像下面這樣就可以建立域:

CREATE DOMAIN MONEY_D AS NUMBER(0,2);

就像下面這樣為網域新增約束:

ALTER DOMAIN MONEy_D

ADD CONSTRAINT MONEY_CON

CHECK(VALUE>5);

然後像下面這樣引用域:

CREATE TABLE EMP_PAY

#(EMP_ID NUMBER(9),

EMP_NAME VARCHER2(30),

PAY_RATE MONEY_D);

#三、小結

Sql具有多種資料類型,對於使用過其他程式語言的人來說,這些都不算陌生。資料類型允許不同類型的資料保存到資料庫,例如單一字元、小數、日期和時間。無論是使用像c這樣的第三代程式語言,或是使用關係型資料庫實作Sql編碼,資料類型的概念都是一樣的。當然,不同實作中資料類型的名稱坑你有所不同,但其工作方式基本上是一樣的。另外,關係型資料庫管理系統並不是一定要實現,ANSI標準裡規定的全部資料類型才會被認為是與ANSI相容的,因此最好查看具體的文件來了解尅使用的資料類型。

在考慮資料類型、長度、標度和精確度時,一定要仔細地進行短期和長遠的規劃。另外,公司製度和希望使用者以什麼方式存取資料也是要考慮的因素。開發人員應該了解資料的本質。以及資料在資料庫裡是如何相互關聯的,從而使用恰當的資料型態。


本篇文章只是描述了Sql的資料型態!純文字描述!本篇文章摘錄自《Sql入門經典》。下篇文章說明Sql小白入門(三)管理資料庫對象 !


#

以上是如何理解MySQL中的資料類型概念?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn