本文內容: 數據類型 數值類型 整數型 浮點型 定點型 日期時間類型 字元串類型 補充: 顯示寬度與zerofll 記錄長度 欄位屬性 空\不為空值:NULL、NOT NULL 主鍵:primary key 唯一鍵:unique key 自增長:auto_increment 預設值:default ...
本文內容:
- 數據類型
- 數值類型
- 整數型
- 浮點型
- 定點型
- 日期時間類型
- 字元串類型
- 補充:
-
- 顯示寬度與zerofll
- 記錄長度
- 欄位屬性
- 空\不為空值:NULL、NOT NULL
- 主鍵:primary key
- 唯一鍵:unique key
- 自增長:auto_increment
- 預設值:default
- 欄位描述:comment
- 補充:
-
- 複合鍵
首發日期:2018-04-08
數據類型:
mysql的數據類型就是存儲數據的類型。
數值類型:
- 整數類型
- 預設是有符號,如果需要使用無符號的數據類型要在後面加"UNSIGNED"
類型 | 簡寫 | 位元組大小 | (signed)範圍 | (unsigned)範圍 | 備註 |
整數型: | |||||
TINYINT | 1 | 0~255 | -128~127 | ||
SMALLINT | 2 | 0~65535 | -32768~ |
||
MEDIUMINT | 3 | 0~16777215 |
-8388608~ |
||
INTEGER | INT | 4 | 0~4294967295 |
-2147483648~ |
|
BIGINT | 8 | 0~264-1 |
-263~ 263-1 |
- 小數類型:
- 浮點類型:
- size是數值的最大位數,d是小數點右側的位數(即使你沒輸夠那麼多位也會補全那麼多位)。
- FLOAT的精度為6~7位(依據情況不同?畢竟機器是以二進位存儲的),DOUBLE的精度為14~15位
- 整數部分的個數為SIZE-D,直接存入的值的個數不能多於這個,但如果浮點數四捨五入導致整數進位而溢出超過最大位數的,系統允許成立(某些版本貌似已經不允許了,所以一般小數位也不要超過)。
- 定點型:
- 直接不帶括弧的數據類型float、double、decimal代表沒有小數部分
- 浮點類型:
時間日期類型:
時間日期類型包括date,time,datetime,timestamp,year;
- Date:日期,格式是YYYY-MM-DD ,表示的範圍是從1000到9999年
- Time:時間段,格式是HH:II:SS, 指定的某個區間之間,有正負。表示的範圍 -838:59:59~838:59:59
- Timestamp:格式是YYYY-MM-DD HH:II:SS,表示的範圍從1970-01-01 00:00:00到2038-01-19 03:14:07 【一旦該行記錄被修改,那麼timestamp會修改成當前時間。】
- Year:年份,表示的範圍1901-2156
字元串類型 :
-
set :集合字元串。將一個個特定的字元串放到集合裡面。
- 定義了集合之後,不能插入集合元素之外的字元串,(可以插入多個符合條件的字元串)
- 集合字元串實際上也是僅僅存儲數值,系統自動轉換成對應的字元串。
- 集合中每一個元素對應一個二進位位,被選中的為1,沒選中的為0,左邊為二進位中的低位,右邊為高位,從右到左得到二進位結果
create table my_set( hobby set('football','basketball','pingpong','computer') )charset utf8; insert into my_set values('basketball,computer'); insert into my_set values(3);-- 3=0011 insert into my_set values(5);-- 5=0101
-
enum :枚舉字元串
- 有點類似set,但這裡只能插入一個字元串
- 將可能出現的數據列舉出來,實際存儲的數據只能是列舉出來的數據。
- 使用枚舉有利於統一數據,以及節省存儲空間(枚舉只是存儲數值,系統轉換成字元串)。
- 枚舉元素實際上按定義的順序標號,從1開始,所以可以直接插入枚舉元素對應的數值。
- 如:
create table my_enum( gender enum('male','female','unknown') )charset utf8;
-
blob :二進位數據字元串
- 存儲二進位數據(少用)
-
text :文字字元串
- 存儲文字,當字元大於255時,一般使用text;
-
varchar :變長字元串
-
char :定長字元串
- char(L),L代表字元長度,單位為字元,最大長度為255,不使用L時預設為1
- 不同環境中根據字元大小,實際占有的空間不同;在UTF8環境下,char(4)所用的位元組數為4*3=12;
補充:
create table myInt(t1 TINYINT(3)); drop table myInt; insert into myInt values(127),(1); select * from myInt; alter table myInt modify t1 tinyint(3) zerofill; select * from myInt;
-
不要輕易的使用最大限度來存儲字元串,因為涉及記錄長度問題 :
- MySQL中規定任何一條數據最長不能超過65535個位元組
- 如果有任何一個欄位允許為空,那麼系統會自動從整個記錄中保存一個位元組來存儲NULL;
- text文本不占用記錄長度,額外存儲。
- UTF8中varchar的最大限度:65535-2(需要兩個位元組來存儲長度) /3=21844,所以最大字元數為21844
- GBK中varchar的最大限度:65535-2(需要兩個位元組來存儲長度) /2=32766
欄位屬性:
欄位屬性是欄位除數據類型外的屬性,一般有空\不為空值、主鍵、唯一鍵、自增長、預設值、描述等屬性。
空\不為空值:NULL、NOT NULL
- 欄位的數據預設情況下是允許為空的(非為鍵情況下),比如說一條人的信息記錄中可以沒有郵箱(或許有些地方用空字元串來代表),我們允許可以不填入數據的欄位可以設置為null;但比如說某些必填數據,我們不想填入的時候留空,可以設置這個欄位為not null
- 允許為空時的數據,空的數據顯示為null:
- 不為空的欄位,插入null時,會報錯:
- null\not null屬性的定義方式(因為預設允許空,所以主要關註not null):
;當然也可以通過修改欄位的形式來給欄位定義not null屬性
主鍵:primary key
- 主鍵用於唯一標識每一條記錄(每個人都有自己唯一的身份證)
- 每一張表只能有一個主鍵。
- 因為唯一標識,所以主鍵欄位的數據不能為空,並且主鍵欄位的數據值不能重覆
- 主鍵也是一種索引,可以提高查找速率。
- 主鍵的定義:
- 主鍵的用途:主鍵的主要用途是用來唯一標識每一條記錄,比如我們想將兩個表(學生表跟老師表)的多對多關係封裝到一個表中,這個抽取的映射欄位一般都是各自的主鍵。
;並且由於主鍵的數據的不可重覆性,也用來約束數據的唯一性。
- 主鍵的刪除:
alter table 表名 drop primary key;
唯一鍵:unique key
- 唯一鍵的功能與主鍵有點類型,但不同的是主鍵只能有一個,唯一鍵可以有多個,而且唯一鍵的欄位的數據允許為空。
- 唯一鍵可以約束欄位,使得欄位的數據不能重覆
- 如果唯一鍵同時也有not null,並且表中沒有主鍵的話,在desc查看表結構中會顯示成主鍵
- 如果唯一鍵也不允許為空,那麼功能與主鍵相同
- 唯一鍵的定義方法可以參考主鍵的。
- 唯一鍵的刪除:
alter table 表名 drop index 唯一鍵名; -- 唯一鍵預設使用欄位名來定義名字
自增長:auto_increment
- 自增長的功能是可以使某個欄位的數據隨著記錄的插入而進行增長(不給這個欄位插入數據的情況下)
- 自增長的前提是這個欄位必須是一個“索引”,比如主鍵、唯一鍵
- 自增長的前提這個欄位的數據類型是一個數值型的,(如果給了float,也不會增長成小數,而僅僅是整數)
- 一個表只能有一個自增長。
- 只有不給值,或者給null的情況下,才能正確自增長;如果某一次自增長失敗了,那麼下一次會從當前欄位的最大值開始繼續自增長。
- 自增長的定義方法:
;當然也可以通過修改欄位的形式來給欄位定義not null屬性
- 自增長的修改:
- 修改增長速度:set auto_increment = 值;
- 修改下次增長的值:alter table 表名 auto_increment = 值; 【修改的值只能變大,不能變小,因為可能導致數據重覆問題】
- 自增長的查看:show vairable like "auto_increment%";
- 自增長的刪除:利用alter來刪除,alter修改欄位屬性的時候如果不帶上原來的屬性就會被刪掉:
預設值:default
欄位描述:comment
補充: