MySQL資料表型別 資料型別

2021-07-02 14:03:01 字數 3367 閱讀 1705

表型別

mysql的資料表型別很多,其中比較重要的是myisam,innodb這兩種。

這兩種型別各有優缺點,需要根據實際情況選擇適合的,mysql支援對不同的表設定不同的型別。下面做個對比:

myisam表型別是一種比較成熟穩定的表型別,但是myisam對一些功能不支援。

myisam

innodb

事務不支援

支援資料行鎖定

不支援,只有表鎖定

支援外來鍵約束

不支援 

支援表空間大小

相對小相對大,最大是2倍 

全文索引

支援 不支援 

gis資料 

支援 不支援 

count問題 

無 執行count(*)查詢時,速度慢 

一般情況下我覺得選擇myisam就行,如果需要事務,或者需要很多使用者同時修改某個資料表裡的資料時,可以考慮innodb資料表。

資料型別

1.整型(***int)

mysql資料型別

含義tinyint(m)

1個位元組表示(-128~127)

smallint(m)

2個位元組表示(-32768~32767) 

mediumint(m)

3個位元組表示(-8388608~8388607) 

int(m)

4個位元組表示(-2147483648~2147483647) 

bigint(m)

8個位元組表示(+-9.22*10的18次方) 

右側的取值範圍是在未加unsigned關鍵字的情況下,如果加了unsigned,則最大值翻倍,如tinyint unsigned的取值範圍為(0~256)。

書上說int(m)括弧裡的m是表示select查詢結果集中的顯示寬度,並不影響實際的取值範圍,我測了一下,定義乙個欄位number 型別為int(4),插入一條記錄"123456",用mysql query broswer執行select查詢,返回的結果集中123456正確顯示,沒有影響到顯示的寬度,不知道這個m有什麼用。

2.浮點型(float和double)

mysql資料型別

含義 float(m,d)

單精度浮點型,8位精度(4位元組),m是十進位制數字的總個數,

d是小數點後面的數字個數。

double(m,d)

雙精度浮點型,16位精度(8位元組)

引數m只影響顯示效果,不影響精度,d卻不同,會影響到精度。

比如設乙個字段定義為float(5,3),如果插入乙個數123.45678,實際資料庫裡存的是123.457,小數點後面的數別四捨五入截成457了,但總個數不受到限制(6位,超過了定義的5位)。

3.定點數(decimal)

decimal(m,d)  定點型別

浮點型在資料庫中存放的是近似值,而定點型別在資料庫中存放的是精確值。引數m是定點型別數字的最大個數(精度),範圍為0~65,d小數點右側數字的個數,範圍為0~30,但不得超過m。

對定點數的計算能精確到65位數字。

4.字串(char,varchar,***text)

mysql資料型別

含義 char(n) 

固定長度的字串,最多255個字元

varchar(n) 

固定長度的字串,最多65535個字元

tinytext 

可變長度字串,最多255個字元 

text 

可變長度字串,最多65535個字元 

mediumtext 

可變長度字串,最多2的24次方-1個字元 

longtext 

可變長度字串,最多2的32次方-1個字元 

char和varchar:

1.都可以通過指定n,來限制儲存的最大字元數長度,char(20)和varchar(20)將最多只能儲存20個字元,超過的字元將會被截掉。n必須小於該型別允許的最大字元數。

2.char型別指定了n之後,如果存入的字元數小於n,後面將會以空格補齊,查詢的時候再將末尾的空格去掉,所以char型別儲存的字串末尾不能有空格,varchar不受此限制。

3.內部儲存的機制不同。char是固定長度,char(4)不管是存乙個字元,2個字元或者4個字元(英文的),都將占用4個位元組,varchar是存入的實際字元數+1個位元組(n<=255)或2個位元組(n>255),所以varchar(4),存入乙個字元將占用2個位元組,2個字元占用3個位元組,4個字元占用5個位元組。

4.char型別的字串檢索速度要比varchar型別的快。

varchar和text:

1.都是可變長度的,最多能儲存65535個字元。

2.varchar可指定n,text不能指定,內部儲存varchar是存入的實際字元數+1個位元組(n<=255)或2個位元組(n>255),text是實際字元數+2個位元組。

3.text型別不能有預設值。

4.varchar可直接建立索引,text建立索引要指定前多少個字元。查詢速度varchar要快於text,在都建立了索引的情況下,text的索引好像沒起作用,參見這篇文章:

5.二進位制資料(***blob)

***blob和***text是對應的,不過儲存方式不同,***text是以文字方式儲存的,如果儲存英文的話區分大小寫,而***blob是以二進位制方式儲存的,不區分大小寫。

***blob儲存的資料只能整體讀出。

***text可以指定字符集,***blob不用指定字符集。

6.日期時間型別(date,time,datetime,timestamp)

mysql資料型別

含義 date

日期'2008-12-2' 

time 

時間'12:25:36' 

datetime

日期時間'2008-12-2 22:06:44' 

timestamp 

不固定

timestamp比較特殊,如果定義乙個欄位的型別為timestamp,這個欄位的時間會在其他字段修改的時候自動重新整理。所以這個資料型別的字段可以存放這條記錄最後被修改的時間,而不是真正來的存放時間。

資料型別的屬性

mysql關鍵字

含義 null 

資料列可包含null值

not null

資料列不允許包含null值 

default ***

預設值,如果插入記錄的時候沒有指定值,將取這個預設值 

primary key 

主鍵 auto_increment 

遞增,如果插入記錄的時候沒有指定值,則在上一條記錄的值上加1,僅適用於整數型別 

unsigned 

無符號 

character set name 

指定乙個字符集 

資料型別與資料表

mysql資料型別 資料表是資料庫最重要的組成部分之之一,是其他物件的基礎 use db name 開啟資料庫 create table if notexists table name column name data type,例如我們要建立乙個名字叫tb1的資料表 mysql create ta...

MySQL資料表型別

mysql資料表支援六種型別 分別是 bdb heap isam merge myisam innobdb,這六種又分為兩類,單獨一類是bdb,稱為 事務安全型 transaction safe 其餘都屬於第二類,稱為 非事務安全型 non transaction safe 下面詳細介紹這些表 事務...

MySQL資料表的資料型別總結與選擇

1 整數型別 tinyintt,smallint,mediumint,int,bigint。分別使用8,16,24,32,64位儲存空間。它們可以儲存的值得範圍從 2的 n 1 次方到2的 n 1 次方 1,其中n是儲存空間的位數。注 mysql可以為整數型別指定寬度,例如int 11 對大多數應用...