今天對關於mysql資料庫的學習做一總結,我們都知道其實真正約束欄位的是字段的資料型別,但資料型別的約束又很單一,只規定該字段放什麼資料以及資料大小,不能規定額外的第三方資訊,可我們又有其他需求,這時就需要一些額外的約束來更加保證資料的合法性。呢麼今天,我就為大家簡單介紹一下關於mysql資料庫的列屬性(也就是字段屬性)
null :
該欄位資料可為空 (預設)實際開發時盡可能保證所有資料不為空,因為空資料無意義且不可參與運算,占用乙個位元組
not null :
該欄位資料不能為空
default :
當我們實際應運時會發現某一種資料會經常性的出現某個具體值,這時我們就可以一開始指定好預設值(比如乙個公司員工工資都是8k,呢我們在員工工資這一字段就可以設定 default 8000);而在需要真實資料時,使用者可以選擇性使用預設值,也可以填充實際資料(比如這時有個高管,工資20k,插入資料時就可以直接寫20000)。(使用預設值可在插入資料時在有預設值欄位不插資料或使用default關鍵字)
欄位名 資料型別 default 預設值;
insert
into 表名 values (default);
primary :
主鍵:primary key ,主要的鍵,一張表中只能有乙個字段可以使用對應的鍵,(用來唯一約束該欄位裡面的資料,不可重複)4.1 增加主鍵:一張表中只能最多有乙個主鍵,且主鍵不可為空
1).建立表時直接在字段之後跟primary key關鍵字
欄位名 資料型別 primary
key;
優缺點: 直接了當但只能使用乙個字段作為主鍵
2).建立表時,在所有字段之後,使用 primary key(主鍵字段列表) 來建立主鍵,如果有多個字段作為主鍵,可以是復合主鍵
primary
key(用來作為主鍵的字段)
;
3).當表建立好之後通過修改字段屬性追加或直接新增。(前提是該字段資料必須無重複)
alter
table 表名 modify 欄位名 資料型別 primary
key;
alter
table 表名 add
primary
key(字段列表);
4.2 主鍵約束:
1).主鍵對應欄位中的資料不允許重複,一旦重複,資料操作失敗(增和改)
2).復合主鍵只要滿足其組合主鍵不一致即可,若組合主鍵相同則衝突(主鍵列表中資料不可全相同)
4.3 主鍵更新/刪除:
想要更新主鍵必須先刪除原有主鍵之後才可新建(所以所謂的主鍵更新實際上是刪除原來的主鍵之後重新再定義主鍵。)
alter
table 表名 drop
primary
key;
4.4 主鍵分類:
在實際建立表的過程中,很少使用真實業務資料作為主鍵字段(業務主鍵例如學號,課程號)大部分時候使用邏輯性的字段(欄位無意義,值是什麼都可以)將這種字段主鍵稱之為邏輯主鍵(即主鍵可分為邏輯主鍵和業務主鍵)
unique key :
一張表中往往有很多字段需要具有唯一性,資料不可重複,但一張表中只能有乙個主鍵,此時,唯一鍵(unique5.1 增加唯一鍵:key)就可以解決表中有多個字段需要唯一性約束的問題。
唯一鍵本質與主鍵差不多,唯一鍵預設的允許自動為空且可以多個為空(空字段不參與唯一性比較)
當系統發現沒有主鍵時會使用唯一鍵代替主鍵作用(唯一鍵字段不為空)
1).在建立表時,字段之後直接跟
欄位名 資料型別 unique
/unique
key
2).在所有字段之後跟
unique
key(字段列表);//復合唯一鍵
3).建立表之後再新增唯一鍵:
alter
table 表名 add
unique
key (欄位名)
5.2 唯一鍵約束:
與主鍵本質相同;唯一區別就是唯一鍵預設允許為空且多個為空(允許為空),若唯一鍵字段不允許為空,則與主鍵的約束作用一致
5.3 唯一鍵更新/刪除:
同主鍵,更新唯一鍵也需要先刪除後新建(針對於同一字段,因為系統認為唯一鍵只是普通索引)
alter
table 表名 drop
index 索引名(唯一鍵欄位名)
auto_increment :
1,當對應的字段不給值或者為預設值,null時,會自動被系統觸發,系統會從當前欄位中已有的最大值進行 +1 操作,得到乙個新的不同的字段,既能保證資料變化又不需要人工操作,通常與主鍵搭配2,任何乙個欄位要做自增長前提必須自身是乙個索引(key欄有值)
3,自增長字段必須是整型數值字段(int)
4,一張表最多只能有乙個自增長
欄位名 整型資料型別 primary
keyauto_increment
;
6.1 自增長使用:
當自增長被給定的值為預設值或null時會觸發自動增長,自增長第乙個元素預設為1,且每次自增 1 ,若自增長對應的字段輸入了值則自增長失效,下次重新在最大值 +1 進行增長
6.2 增加自增長:
當表建立完成後如果要給字段新增自增長
alter
table 表名 modify 欄位名 資料型別 auto_increment;
6.3 修改自增長:
自增長如果涉及到字段改變,必須先刪除自增長,後增加
修改當前自增長已經存在的值時,只能修改比當前已有的自增長的最大值大,小的話無效
alter
table 表名 auto_increment
= 值;
在這裡我們簡單介紹一下關於自增長的修改操作,但是沒啥意義,就全當擴充套件內容:
在資料庫中,所有系統的表現(字符集,校對集)都是由系統內部的變數進行控制,我們可以通過命令來檢視這些變數,(此處針對於自增長來檢視)
檢視自增長對應變數:
show variables like 『auto_increment
%』;
修改變數是對整個資料庫修改而不是單個表,但此修改為會話級修改:
set auto_increment_increment = n;
//一次自增變數為n
6.4 刪除自增長:
自增長為字段屬性,可通過modify進行修改(保證字段沒有auto_increment)
alter
table 表名 modify 欄位名 資料型別;(有主鍵時不可新增主鍵)
comment :
列描述,無實際含義,專門用來描述字段,會根據表建立語句儲存;使用show create table 表名;
進行檢視,類似於注釋。
欄位名 資料型別 comment 『描述』;
最後我們對索引做一簡單介紹:
幾乎所有的索引都是建立在字段之上索引的意義:系統根據某種演算法,將已有的資料(未來可能新增的資料)單獨建立乙個檔案,檔案能夠實現快速的匹配資料,並且快速的找到對應表中的記錄
資料庫在查詢資料時先取出一條資料進行匹配,不匹配就再取一條資料進行匹配,直到匹配成功之後還會繼續取資料進行匹配,也就是整表索引,這樣會使資料查詢效率極低;當增加索引後,資料庫會先在索引檔案中找,找到索引檔案後系統告訴資料庫該資料在磁碟中哪一行,然後直接在該行找到需要查詢的資料
1.提公升查詢資料的效率增加索引的前提條件:2.約束資料的有效性(唯一性等)
索引本身會產生索引檔案(有可能比資料檔案還大)會非常耗費磁碟空間,可看作效率與磁碟空間的比例。視情況而定。mysql提供的索引:若某欄位需要作為查詢條件經常使用則可以使用索引(一定要想辦法增加索引來提公升效率);
若某欄位需要進行資料的有效性約束,也可能使用索引(主鍵,唯一鍵)
1.主鍵索引:primary key好了,到這裡我們今天對於mysql資料庫的列屬性的簡單介紹就完了,如有紕漏,還是勞煩各位前輩多多指教!!!2.唯一索引:unique key
3.全文索引:fulltext index
4 普通索引:index
刪除唯一索引時按照普通索引來做(drop index)
全文索引:針對文章內部的關鍵字進行索引,最大弊端在於如何確定關鍵字(英文容易:英文單詞之間有空格;中文難:無空格且中文可以隨意組合(需要分詞:sphinx))
Mysql之列 字段 表
數值 型別 介紹大小 範圍tinyint 十分小的資料 1個位元組 2 7 2 2 7 2 7 1 2 1 2 7 1smallint 較小的資料 2個位元組 2 15 2 2 15 2 1 mediumint 中大小資料 3個位元組 2 23 2 2 23 2 1 int標準的整數 4個位元組 2...
mysql建立表的列屬性 建立資料表之列屬性
1 列型別vs列屬性 a 列屬性主要用於約束單獨的乙個欄位在整行中的取值限制。b 列屬性主要用於約束單獨的乙個欄位在整列中的取值限制。2.null mysql系統的預設值,預設在插入記錄時當我們沒有為某個字段提供使用資料時,mysql會使用 null值為填充。說明 一般我們在建立表時,不允許欄位的值...
mysql時間屬性 MySQL 時間戳屬性1
datetime型別和timestamp型別的差別 datetime型別 datetime型別存放資料範圍從1001年到9999年,精度為秒,將時間和日期封裝成格式為yyyymmddhhmmss的整數中,使用8個位元組的儲存空間。datetime型別不存放任何時區相關資訊。datetime型別預設為...