1. 程式人生 > 其它 >MySQL之欄位資料型別和列屬性

MySQL之欄位資料型別和列屬性

資料型別:

  對資料進行統一的分類,從系統的角度出發,為了能夠使用統一的方式進行管理,更好的利用有限的空間。

SQL中將資料型別分成了三大類:數值型別、字串型別、時間日期型別。

數值型:

  數值型資料:都是數值,系統將數值型分為整數型和小數型。

  整數型:

  存放整形的資料,在SQL中因為更多考慮如何節省磁碟空間,所以系統將整形又細分為5類。

SQL中的數值型別全部都預設有符號,但是可以分正負。

有時候需要使用無符號資料:需要給資料型別限定:int unsigned; 無符號,從0開始。

插入資料測試:

在查看錶結構的時候,發現每個欄位的資料型別之後會自帶一個括號,裡面有指定的數字。

這個資料是顯示寬度,沒有特別的含義,只是預設的告訴使用者可以顯示的形式而已,實際上使用者是可以控制的,這種控制不會改變資料本身的大小。

顯示寬度的意義:當資料不夠顯示寬度的時候,會自動讓資料變成對應的顯示寬度,通常需要搭配一個前導0來增加寬度,不改變值的大小:()

小數型:

字串型別:

  在SQL中,將字串型別分為6類:char、varchar、text、blob、enum和set

  定長字串:char,磁碟(二維表)在定義結構的時候,就已經確定了最終資料的儲存長度。

  變長字串:varchar在分配空間的時候,按照最大的空間分配,但是實際上最終用了多少,是根據具體資料來確定的。

  字串文字:

  如果資料量非常的大,通常說超出255個字元,就會使用文字字串。

  列舉字串:

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

證明欄位儲存的資料是數值:將資料取出來 +0,就可以判斷出原來的資料儲存的到底是字串還是數值,如果是字串最終結果永遠是0,否則就是其他值。

  集合字串:

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

集合中每一個元素都是對應一個對應的二進位制位:

  MySQL的記錄長度:

  mysql中規定:任何一條記錄最長不能超過65535個位元組(varchar永遠達不到理論值)

列屬性:

  真正約束欄位的是資料型別,但是資料型別的約束很單一,需要有一些額外的約束,來更加保證資料的合法性。

  空屬性:

  兩個值:null(預設)和not null(不為空)

  雖然是預設為空,資料庫基本都是欄位為空,但是在實際開發的時候,應當儘可能的保證所有的資料都不應該為空,空資料是沒有意義的,空資料沒有辦法參與運算。

  列描述:

  comment(描述),沒有實際的含義,是專門用來描述欄位,會根據表建立語句儲存,用來給資料庫管理員來進行解釋的。

  預設值:

  某一種資料會經常性的出現某個具體的值,可以在一開始就指定好,在需要真實資料的時候,使用者可以選擇性使用預設值。

  預設值關鍵字:default;

預設值的生效(使用):在資料進行插入的時候,不改變欄位的賦值。

想要使用預設值,可以不一定去指定列表,故意不使用欄位列表:可以使用default關鍵字代替。

  主鍵(primary key):

  一張表只能有一個欄位可以使用對應的鍵,用來唯一約束該欄位裡面的資料,不能夠重複,這種鍵稱為主鍵。  

  增加主鍵:

  SQL操作中有多種方式可以給表增加主鍵:大體分為三種。

  方案一:在建立表的時候,直接在欄位之後跟上primary key關鍵字(主鍵本身不允許為空)。其優點:非常直接,缺點:只能使用一個欄位作為主鍵。

  方案二:在建立表的時候,在所以得欄位之後,使用primary key(主鍵欄位列表)來建立主鍵(如果有多個欄位作為主鍵,可以是複合主鍵)

  方案三:當表已經建立好之後,額外追加主鍵,可以通過修改表的欄位屬性,直接追加。(前提:表中的欄位對應的資料本身是獨立的(不重複));

  Alter table 表名 add primary key(欄位列表);

  主鍵約束:

  主鍵對應的欄位中的資料不允許重複:一旦重複,資料操作失敗(增和改)

  更新主鍵與刪除主鍵

  沒有辦法更新主鍵,主鍵必須先刪除,後增加。

  Alter table 表名 drop primary key;

  主鍵分類:

  在實際建立表的過程中,很少使用真實業務資料作為主鍵欄位(業務主鍵:如學號,課程號);大部分時候,是使用邏輯性的欄位(欄位沒有業務含義,值是什麼沒有關係),將這種主鍵稱為邏輯主鍵。

  自增長(auto_increment):

  當對應的欄位沒有值或者給預設值、或者給null的時候,會自動的被系統觸發。系統會從當前欄位中已有的最大值再進行+1操作,得到一個新的不同的欄位。

  自增長通常是跟主鍵搭配。

  自增長特點:

  自增長的使用:

  當自增長被給定的值是null或者預設值的時候會觸發自動增長。

  

  自增長如果對應的欄位輸入了值,那麼自增長失效,但是下一次還是能夠正確的自增長(從最大值+1)

  修改自增長:

  自增長如果涉及到欄位的改變,必須先刪除自增長,後增加(一張表只能有一個自增長)

  修改當前自增長已經存在的值:修改只能比當前已經有的自增長的最大值大,不能夠小(小不會生效)

  Alter table 表名 auto_increment = 值;

  刪除自增長:

  自增長是欄位的一個屬性:可以通過modify來進行修改(保證欄位沒有auto_increment即可)

  Alter table 表名 modify 欄位 型別;

  唯一鍵:

  一張表往往有很多欄位需要具有唯一性,資料不能重複,但是一張表中只能有一個主鍵。

  唯一鍵(unique key)就可以解決表中有多個欄位需要唯一性約束的問題。

  唯一鍵的本質和主鍵差不多:唯一鍵預設是允許自動為空,而且可以多個為空(空欄位不參與唯一性比較)

  增加唯一鍵:

  與主鍵類似,有三種方案。

  唯一鍵約束:

  唯一鍵與主鍵本質相同,唯一區別就是唯一鍵預設允許為空,而且是多個為空。(如果唯一鍵也要求不能為空,那麼與主鍵就是一樣的)

索引:

 幾乎所有的索引都是建立在欄位之上。

  索引:系統根據某種演算法,將已有的資料(未來可能新增的資料),單獨建立一個檔案,檔案能夠實現快速的配置資料,並且能夠快速找到對應標的記錄。

  索引的意義:

  1、提升查詢資料的效率。

  2、約束資料的有效性(唯一性等)

  增加索引的前提條件:索引本身會產生索引檔案(有時候可能畢書盡檔案還大),會非常耗費磁碟空間。

  如果某個欄位需要作為查詢條件經常使用,那麼可以使用索引(一定會想辦法增加);

  如果某個欄位需要進行資料的有效約束,也可以使用索引(主鍵、唯一鍵)

  

原文地址:https://www.cnblogs.com/soft2018/p/10879760.html