數據類型:
對數據進行統一的分類,從系統的角度出發,為了能夠使用統一的方式進行管理,更好的利用有限的空間。
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/chenshishuo/p/5030029.html
