標籤:data 概念 情況下 目的 資料 varchar 包含 span 最大
關係型資料庫的特點
1,資料以表格的形式出現
2,每行為各種記錄的名稱
3,每列為資料名稱所對應的資料域
4許多的行和列組成一張table
5若干的表單組成databases
術語
資料庫:關聯表的集合
資料表::表是資料的矩陣
列:資料元素,包含相同的資料
行:元組或者記錄,一組相關的資料
冗餘:儲存兩倍資料,降低了效能,但提高資料安全性(頻繁切換兩張表,可以把表1的內容添加到表2)
主鍵:主鍵是唯一的.可以使用主鍵來查詢資料
外鍵:用於關聯兩張表
複合鍵:將多個列作為一個索引鍵
索引:使用索引可快速存取資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
參照完整性: 參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關聯式模式必須滿足的完整性條件約束條件,目的是保證資料的一致性
資料類型
資料類型是定義列中可以儲存什麼資料以及該資料實際怎麼儲存的基本規則
實際編程中,選擇列的基本類型時的基本原則是:可以滿足資料的最小類型
字串資料型別:
定長串其長度是建立table時指定的,不允許多於指定的字元資料長度,實際儲存的空間和指定的一樣多,char屬於定長串
變長串儲存長度可變的文本,只按照指定的資料儲存,text屬於變長串
比較:變長串資料類型靈活,定長串資料類型高效,MySQL不允許對變長串(或一個列的可變部分)進行索引
| 資料類型 |
說明 |
主要用途 |
| Char |
1~255個字元的定長串,它的長度必須在建立時指定,否則MySQL假定為CHAR(1) Char(n=1~255) char(8),你輸入的字元小於8時,它會再後面補空值。當你輸入的字元大於指定的數時,它會截取超出的字元。 |
主要用於標題,作者等資料量小的資料類型 |
| Varchar |
可變長度,最多不超過255位元組,如在建立時指定VARCHAR(n),則可儲存0~n個字元的變長串。 儲存變長資料,但儲存效率沒有CHAR高。如果一個欄位可能的值是不固定長度的,我們只知道它不可能超過10個字元,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。為什麼"+1"呢?這一個位元組用於儲存實際使用了多大的長度。 從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。 |
主要用於不確定的長度,例如:路徑,文章內容(Varchar(800))等 |
| text |
最大長度為64K的變長文本 常規大小的Text欄位。 |
文章內容 |
| TINYTEXT |
同TEXT,最大長度為255位元組 |
| MEDUIMTEXT |
同TEXT,最大長度為16K |
| LONGTEXT |
同Text,最大長度為4GB(純文字,一般不會到4G) |
| Blob |
text 區分大小寫,二blob不區分,其他相同。 |
二進位類型可儲存任何資料,如文字、映像、多媒體等。還包括TITYBLOB,MEDIUMBLOB,LongBlob |
| 兩種特殊類型 |
| ENUM |
接受最多64K個串組成的預定義集合的某個串 |
枚舉,該類型的列只可以容納所列值之一或者為null |
| SET |
接受最多64K個串組成的預定義集合的零個或多個串 |
指定列中的值必須來自一個特定的集合中的指定值,例如:set(‘c‘, ‘h‘, ‘p‘, ‘f‘, ‘s‘, ‘j‘, ‘a‘, ‘b‘) |
注意:不管任何形式的串資料類型,串值都必須在引號內(通常單引號更好);如果數值是計算中使用的數值,則應儲存在數值資料類型列中,如果作為字串使用(如電話號碼、郵遞區號)則應儲存在串資料類型列中。
數實值型別:(整型和浮點型)
整型
| 資料類型 |
取值範圍 |
儲存空間 |
描述 |
主要用途 |
| tinyint[(m)] |
有符號值:-128 到127(- 2^7 到2^7 – 1) 無符號值:0到255(0 到2^8 – 1) |
1位元組 |
非常小的整數 |
人員年齡或兄弟姐妹數,則tinyint最合適 |
| smallint[(m)] |
有符號值:-32768 到32767(- 2^15 到2^15 – 1) 無符號值:0到65535(0 到21 6 – 1) |
2位元組 |
小型整數 |
用於分類id,欄目smallint(5) |
| mediumint[(m)] |
有符號值:-8388608 到8388607(- 2^23 到2^23 – 1 ) 無符號值:0到16777215(0 到2^24 – 1) |
3位元組 |
中型整數 |
【適用於文章id 】mediumint能夠表示數百萬的值並且可用於更多類型的值,但儲存代價較大 |
| int[(m)] |
有符號值:-2147683648 到2147683647(- 2^31 到2^31- 1) 無符號值:0到4294967295(0 到2^32 – 1) |
4位元組 |
一般整數 |
適用於日期
|
| bigint[(m)] |
有符號值:-9223372036854775808 到9223373036854775807(- 2^63到2^63-1) 無符號值:0到18446744073709551615(0到2^64 – 1) |
8位元組 |
大型整數 |
浮點型
| 資料類型 |
取值範圍 |
儲存空間 |
描述 |
主要用途 |
| float |
取決於精度 |
可變 |
用於指定單精確度或雙精確度浮點數 |
double佔用float的兩倍空間。除非特別需要高精度或範圍極大的值,一般應使用只用一半儲存代價的float型來表示資料。 |
| float[(m, d)] |
最小非零值:±1.175494351e – 38 |
4位元組 |
單精確度浮點數 |
等同於Float(4),但是指定顯示寬度和小數點位元 |
| double[(m, d)] |
最小非零值:±2.2250738585072014e – 308 |
8 位元組 |
雙精確度浮點數 |
等同於Float(8),但是指定顯示寬度和小數點位元 |
| decimal (m, d) |
有符號值:-2147683648 到2147683647(- 2^31 到2^31- 1) 無符號值:0到4294967295(0 到2^32 – 1) |
4位元組 |
一般整數 |
適用於日期
|
| bigint[(m)] |
m位元組(mysql < 3.23),m+2位元組(mysql > 3.23 ) |
M+2 |
可變;其值的範圍依賴於m 和d |
浮點數,以char儲存,範圍取決於顯示寬度M |
日期和時間
資料類型 |
儲存位元組數 |
取值範圍 |
描述 |
DATE |
4 |
1000-01-01——9999-12-31 |
以YYYY-MM-DD格式來顯示,如果我們想插入當前系統的時間,則可以插入CURRENT_DATE或者NOW()。 |
TIME |
3 |
-838:59:59——838:59:59 |
儘管小時範圍一般是0~23,但是為了表示某些特殊時間間隔,MySQL將TIME的小時範圍擴發了,而且支援負值。對TIME類型賦值,標準格式是‘HH:MM:SS‘,但不一定非要是這種格式。 如果插入的是‘D HH:MM:SS‘格式,則類似插入了‘(D*24+HH):MM:SS‘。比如插入‘2 23:50:50‘,相當於插入了‘71:50:50‘。如果插入的是‘HH:MM‘或‘SS‘格式,則效果是其他未被表示位的值賦為零值。比如插入 ‘30‘,相當於插入了‘00:00:30‘;如果插入‘11:25‘,相當於插入了‘11:25:00‘。在MySQl中,對於‘HHMMSS‘格式, 系統能夠自動轉化為標準格式。 |
DATETIME |
8 |
1000-01-01 00:00:00——9999-12-31 23:59:59 |
以YYYY-MM-DD HH:MM:SS格式來顯示 |
TIMESTAMP |
4 |
19700101080001——20380119111407 |
TIMESTAMP的取值範圍比較小,沒有DATETIME的取值範圍大,因此輸入值時一定要保證在TIMESTAMP的範圍之內。它的插入也與插入其他 日期和時間資料類型類似。那麼TIMESTAMP類型如何插入目前時間?第一,可以使用CURRENT_TIMESTAMP;第二,輸入NULL,系統自 動輸入當前的TIMESTAMP;第三,無任何輸入,系統自動輸入當前的TIMESTAMP。 另外有很特殊的一點:TIMESTAMP的數值是與時區相關。 |
YEAR |
1 |
1901——2155 |
給YEAR類型複製可以有三種方法: 第一種是直接插入4位字串或者4位元字; 第二種是插入2位字串,這種情況下如果插入‘00‘~‘69‘,則相當於插入2000~2069;如果插入‘70‘~‘99‘,則相當於插入 1970~1999。第二種情況下插入的如果是‘0‘,則與插入‘00‘效果相同,都是表示2000年; 第三種是插入2位元字,它與第二種(插入兩位字串)不同之處僅在於:如果插入的是一位元字0,則表示的是0000,而不是2000年。所以在給YEAR 類型賦值時,一定要分清0和‘0‘,雖然兩者相差個引號,但實際效果確實相差了2000年。 |
MySQL資料類型概念