標籤:mysql 基礎文法
一,字串類型
char和varchar
1. 都需要指定字元的長度,char中的長度是字元的長度,而varchar的長度是位元組的長度
2. char中指定的長度就是實際佔用的長度,而varchar指定的長度只是一個範圍,所以varchar還要拿1-2個位元組儲存該字串到底有多少個位元組,並且varchar中能夠實際儲存的字元跟編碼有關(utf8編碼20000多,gbk編碼30000多)
3. varchar對儲存空間的佔用更靈活,但是char的效率更高
4.如果字串的長度是固定已知的,就用char,如果字串的長度是可變的,就用varchar
b.text:文本類型,使用起來類似於varchar,只不過這裡不需要指定長度,其中longtext認為文本沒有限制
c.enum:枚舉類型,類似於單選!實際儲存的是原選項的位置,位置用1,2,3,4來代替,理論上最多可以表示65535個選項
d.set:集合類型,類似於多選!實際儲存的是也原選擇的位置,位置用1,2,4,8來代替,然後把所有選項的位置相加,理論上最多可以表示64個多選項
e.binary、varbinary、blob:二進位文本類型,就是位元組流的char、varchar和text,在實際的項目中,很少使用
二,列屬性
null|not null,預設值是null,也就是允許為空白,如果是notnull而又沒有給該欄位賦值的話,系統會首先查詢該欄位有沒有預設值
default:給一個欄位一個預設值,如果沒有給該欄位填充資料,就用該預設值來代替,通常就是配合not null一起使用
primary key:主鍵,唯一可區別其他記錄的欄位,一個表中只能有一個主鍵,也可以很多個欄位組合成一個組合主鍵,而且不允許為空白!
unique key:唯一鍵,與主鍵的區別是唯一鍵可以有很多個,而且允許為空白
auto_increment:自動成長,使用這個屬性有兩個條件,第一該欄位必須為整型,第二該欄位必須存在索引,通常就是配合主鍵一起使用,也可以通過修改表選項設定自動成長的預設初始值
comment:列注釋
三,索引
索引的本質就是在“原始表”的基礎之上根據某個或某些欄位進行排序後的“內建表”
索引的最大優勢可以極大的提高查詢速度
在提高查詢速度的同時也降低了增刪改的速度
四,實體與實體關聯
一對一:主要用來做資料表的最佳化(垂直分割)
一對多:在多的那一方增加一個欄位,用於指向1的那一方
多對多:增加一個中間表,就是將一個多對多的關係拆分成兩個一對多的關係
五,外鍵
只有InnoDB儲存引擎才可以使用
關鍵字:foreign key
級聯操作:主表更新onupdate[級聯操作],主表刪除:文法形式為:on delete[級聯操作]。cascade:同步操作,set null:設定為null,restrict:拒絕主表的更新或刪除
定義方式:foreignkey(本表欄位名) references 父表(主鍵) on delete[cascade|set null|restrict] on update [cascade|setnull|restrict]
六,範式
1第一範式:要求把各種資料設計成一個一個的欄位,不能再分
2第二範式:在滿足第一範式的基礎之上,表中的一行都具有唯一的可以區分的特性;不能有部分依賴
3第三範式:在滿足第二範式的基礎之上,消除傳遞依賴
Mysql 基礎文法2