MySQL之列屬性

2021-10-05 14:22:37 字數 4567 閱讀 1080

今天對關於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 :

一張表中往往有很多字段需要具有唯一性,資料不可重複,但一張表中只能有乙個主鍵,此時,唯一鍵(unique

key)就可以解決表中有多個字段需要唯一性約束的問題。

唯一鍵本質與主鍵差不多,唯一鍵預設的允許自動為空且可以多個為空(空字段不參與唯一性比較)

當系統發現沒有主鍵時會使用唯一鍵代替主鍵作用(唯一鍵字段不為空)

5.1 增加唯一鍵:

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

2.唯一索引:unique key

3.全文索引:fulltext index

4 普通索引:index

刪除唯一索引時按照普通索引來做(drop index)

全文索引:針對文章內部的關鍵字進行索引,最大弊端在於如何確定關鍵字(英文容易:英文單詞之間有空格;中文難:無空格且中文可以隨意組合(需要分詞:sphinx))

好了,到這裡我們今天對於mysql資料庫的列屬性的簡單介紹就完了,如有紕漏,還是勞煩各位前輩多多指教!!!

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型別預設為...