02、mysql數據類型和列屬性

Mysql數據類型和列屬性

 

一、    回顧

數據庫基礎知識:關係型數據庫(運行在磁盤)和非關係數據庫(運行在內存中)

關係型數據庫:

1、 建立在關係模型上的數據庫

2、 數據結構:二維表,比較浪費空間

3、 操作數據的指令集合:SQ(DDL、DML[DQL]和DCL)

4、 完整性的約束,表內和表之間(實體)

 

二、數據類型(列類型)

所謂的數據類型,就是對大數據進行統一的分類,從系統的角度出發是爲了能夠私用統一的方式進行管理,這樣我們就能更好的利用有限空間

 

Sql中將數據類型分成了三大類:數值類型,字符串類型,時間日期類型。

 

1、 時間日期格式

1) DataTime :時間日期,格式是YYYY-mm-dd HH:ii:ss;表示的時間是從1000年到9999年,有零值

2) Data:日期,就是DateTime中的Date部分。

3) Time:時間(段),指定的某個區間之間

4) TimeStamp:時間戳,並不是時間戳,知識從1970年開始的YYYY-mm-dd HH:ii:ss;格式與DateTime完全一致。

5) Year:年份,由兩種形式,Year(2)和Year(4):1901-2156


需要注意的是:

l  當我們以兩位數的形式來輸入年份時,輸入1-69時,是2001-2069

                                  輸入70-99時,是1970-1999

l  TimeStamp字段,只要當前所在的數據別跟新,該字段一定會被再一次更新成爲當前的時間。而且,該類型的字段是不可以爲空的,這一點是默認的。

l  插入數據時,時間time可以是負數,而且可以是很大的負數,year可以使用兩位數來輸入,也可以用四位數來輸入。

2、 字符串類型:

在sql中,將字符串類型分爲了6類:char , varchar, text, blog, enum, set。

1) 常規字符串,char,磁盤(二維表)在定義結構的時候,就已經確定了最終數據的長度,這種類型的數據是不能改變長度的。

A、 Char(L):length代表的是可以存儲的長度,單位必須是字符。最大的長度值是255個字符。這個被稱爲定長字符串

B、 Varchar 可變長度的字符串,在分配空間的時候,按照最大的空間來分配:但是實際上最終用了多少,是根據具體的數據來確定的。

使用方式: Varchar(L) : L 代表字符長度,理論長度是65536個字節。

3、 文本數據類型(字符串類型的一種)

如果數據量特別大,通常說超過255個文字就會使用文本字符串

文本字符串根據存儲的數據的格式進行分類:text和blog

A、 Text:存儲文字(二進制數據 其實都是存儲路徑),文本字符串不佔用記錄長度,他是額外存儲的,但是text文本字符串也是屬於記錄的一部分,一定需要佔據記錄中的部分長度:10個字節(保存數據的地址以及長度)。

B、 Blog:存儲二進制數據,我們通常不使用這個

4、 枚舉字符串(字符串類型的一種)

枚舉:enum,事先將所有可能出現的結果都設計好,實際上存儲的數據必須是事先規定好的數據中的一個。

枚舉的使用方式:

A、 定義: enum(可能出現的元素列表),這樣的數據是單選的

B、 使用:存儲數據,只能存儲上面定義好的數據。

C、 好處:枚舉類型的字符串比其他類型的,數據要節省空間得多。

l  那麼爲什麼枚舉類型會節省空間呢?

                答案是這樣子的,枚舉類型字段中存儲的數據*是數值,驗證方式就是將數據取出來+0,就可以判斷存儲的數據到底是字符串還是數值,如果字符串最終結果永遠是零,否則就是其他的值。

D、弊端:讀取的效率相比於其他了類型的數據,要低。

E、 存儲的規律,通過查找枚舉存儲的數值類型,我們很巧合的找到了該種數值的存儲規律,即按照我們書寫的順序保存順序號碼。

F、 原理:枚舉在進行數據規範的時候,系統個會自動建立一個數字與枚舉元素的對應關係(關係放到日誌文件中),我們在插入數據的時候,系統自動將字符串轉換成對應的數字存儲,然後在提取的時候,系統自動將數值轉換成對應的字符串進行顯示。

5、 集合字符串(字符串類型的一種)

集合跟枚舉很類似:實際上存儲的數據就是數值,而不是字符串(集合是多選的)

集合的使用方式:

A、 定義:Set(元素列表)。

B、 使用:可以使用元素列表中的元素(多個),使用逗號分隔。

C、 特點:集合中的元素順序是沒有關係的,因爲系統會自動去匹配元素的內容。

D、好處:集合的強大在於能夠規範數據和節省空間。我們的程序在現代社會,一般首要考慮的是程序運行的效率。我們和少用集合類型的表。

 

 

三、Mysql記錄長度

Mysql中規定,任何一條記錄都不能超過65535個字節,varchar永遠達不到理論值。

1、  Varchar的實際存儲長度能達到多少呢?

     在utf8編碼中,最多可以存儲21844字符。

     在gbk編碼中,最多存儲32766個字符。

2、 Text文本字符串,是額外存儲的,但是要佔用10個字節的長路,用來存儲文本的路徑和文本長度。

 

四、列屬性

列屬性:真正約束字段的是數據類型,但是數據類型的約束很單一。需要有一些額外的約束,來更加保證數據的合法性,所以就有了數據庫的列屬性。

列屬性的類型:

   NULL、NOT NULL,default,primarykey,unique key,auto_increment,comment

1、 空屬性,有兩個值null/not null。雖然默認的數據基本上都是爲空,但是我們再開發的時候,要儘可能的保證數據的不爲空,因爲空數據是沒有任何意義的,第二個是空數據不能參與任何的運算。在數據庫中,任何值與null進行運算所得的結果都是null。

2、 列描述,comment,描述,是沒有實際含義,是專門用來描述字段,會根據創建語句保存:用來給數據庫管理員進行了解的。

3、 默認值:某一種數據會經常性的出現某個具體的值,可以再一開始就指定好:在需要真實數據的時候,用戶可以選擇性的使用默認值。

默認值的關鍵字:default

4、 主鍵:primary key,主要的鍵,一張表中只能有一個字段可以使用對應的鍵,用來唯一的約束該字段裏面的數據不能重複。這種鍵我們將之稱爲主鍵。一張表中最多只能有一個主鍵。

1) 增加主鍵

l  方案一:在創建字段的時候,直接在字段之後,跟primary key關鍵字,這種方式,優點是創建主鍵的時候是非常直接的,但是缺點就是隻能選擇一個字段作爲主鍵。

l  方案二:在創建表的時候,在所有的字段之後,使用primary key(主鍵字段列表)來創建主鍵,如果有多個字段作爲主鍵,那麼這個主鍵就稱爲複合主鍵。符合主鍵至少包含兩個字段以上。

值得注意的是: 例如:一張表中的學號和姓名共同組成主鍵的話,那位姓名和學號可以有任意一個字段的數據重複,但是不能兩個字段的數據都是重複的。這一點尤爲重要。

l  方案三:當表已經創建好之後,我們可以追加主鍵,可以通過修改字段的屬性,也可以直接追加主鍵。

Alter table 表名 add primary key(字段列表);

前提:這種方式添加主鍵的話,就必須保證我們所要添加爲主鍵的字段本身時獨立的(不重複)

 

2) 主鍵約束

主鍵中對應的字段不允許重複,一旦重複,數據的增刪改操作會失敗。

3) 更新主鍵&刪除主鍵

我們是沒有辦法直接去更新主鍵的,,主鍵只有在刪除主鍵之後去增加

Alter table 表名 drop primary key;

因爲一張表只有一個主鍵,所以,我們刪除主鍵的時候,就會刪除主鍵裏面包含的所有字段。注意:這個不是說把包含的內容全部刪除,而是指刪除該字段的主鍵設定。

4) 主鍵的分類

在我們實際創建表格的時候,很少使用真實的業務數據作爲主鍵(業務主鍵:如學號,課程號,大部分的時候使用的是邏輯性的字段(字段沒有業務含義,值是什麼都是沒有關係的)),我們就將這種主鍵稱爲邏輯主鍵

發佈了27 篇原創文章 · 獲贊 24 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章