目錄
1,空屬性
2,默認值
3,列描述
4,zerofill
5,主鍵primary key
6,自增長auto_increment
7,唯一鍵unique
8,外鍵foreign key
????????在MySQL中,表的約束是指用于插入的數據必須遵循特定的規則,使其插入正確的數據,以保持數據庫的數據是符合預期的。約束可以應用于列或整個表。
????????表的約束很多,這里主要介紹如下幾個:null/not null,default,comment,zerofill,primary key,auto_increment,unique,foreign key。
1,空屬性
????????兩個值:null(默認的)和 not null(不為空)。
????????數據庫默認字段基本都是字段為空,因為約束字段默認為null。若是 not null 屬性,那么插入時將不允許為空。
2,默認值
? ? ? ? 默認值:default [數據]
????????默認值是插入數據時默認的數值。某一種數據會經常性的出現某個具體的值,可以在一開始就指定好,在需要真實數據的時候, 用戶可以選擇性的使用默認值。
3,列描述
????????列描述:comment [列的描述]。沒有實際含義,專門用來描述字段,用來給程序員進行了解。
? ? ? ? 可發現,comment 注釋信息通過desc查看不到,但通過show可以看到。
4,zerofill
????????zerofill 的主要用于數值類型的字段(如 int、bigint?等),用于將其格式化輸出數據。具體來說,它的作用是用前導零填充數值,使得該列的顯示寬度達到指定的長度。
? ? ? ? 平常所看到如 int(10) 的數值類型就與該字段相關,int占比4字節,這里的10表示填充的寬度,若沒有 zerofill 這個屬性,括號內的數字是毫無意義的。
create table t4(id int(5) zerofill);
insert into t4 (id) values (3);insert into t4 (id) values (123456);
此時,id列的數據為:00003、123456
5,主鍵primary key
????????主鍵 primary key 用來唯一的約束該字段里面的數據,表示該數據不能重復,不能為空。主鍵所在的列通常是整數類型。
? ? ? ? 上面 t4表的描述里 key 對應的 PRI 表示主鍵。?創建表時,一張表中最多只能有一個主鍵,但這個主鍵可以由多個列組成,即復合主鍵。
? ? ? ? 復合主鍵形式為:primary key(主鍵字段列表),如果有多個字段作為主鍵,可以使用復合主鍵。若創建表時沒有添加主鍵,這里可運用相關指令追加主鍵,或者刪除主鍵。
刪除表下的所有主鍵:alter table 表名 drop primary key;
對沒有主鍵的表追加主鍵:alter table 表名 add primary key(要追加列的名稱);
6,自增長auto_increment
????????當對應的字段不給值時,它會自動的被系統觸發,系統會從當前字段中已經有的最大值 +1操作,得到一個新的不同的值。通常和主鍵搭配使用,作為邏輯主鍵。
? ? ? ? 注意:首先,auto_increment修飾的列必須是表的主鍵或唯一鍵的一部分,如果沒有將列定義為主鍵或唯一鍵MySQL不允許使用?auto_increment?屬性。其次,auto_increment 和 default?不能同時使用,因為?auto_increment 列的值是由數據庫自動生成的,通常從 1 開始遞增,它的行為已經隱含了默認值的生成機制,而 default 也是MySQL默認值的自動生成,因此,這兩個字段不能同時使用。上面這兩點是自增長的約束。
7,唯一鍵unique
? ? ? ? 唯一鍵作用與主鍵差不多,都是保證一列中的所有值都是唯一的,不同的是主鍵不可以為空(null),但唯一鍵可以為空,且一個表中可以有多個唯一鍵。
? ? ? ? 主鍵和唯一鍵的運用場景主要是在業務上。主鍵更多的是標識唯一性的,比如身份證號,而而唯一鍵更多的是保證在業務數據上,表示不要和別的信息出現重復。
8,外鍵foreign key
????????外鍵用于定義主表和從表之間的關系:外鍵約束主要定義在從表上,主表則必須是有主鍵約束或unique 約束。當定義外鍵后,要求外鍵列數據必須在主表的主鍵列存在或為null。在MySQL中,外鍵是一種用于建立和加強兩個表數據之間連接的列。通過確保一個表中的數據與另一個表中的數據匹配。
外鍵語法:foreign key (字段列名)?references 主表(列名);
? ? ? ? 由于外鍵約束,如果主表或從表存在依賴項的話,它會拒絕刪除或更新操作。
? ? ? ? 上面,我們設計了主表——班級表myclass 和從表——學生表stu,讓學生表的 class_id 和班級表 id 形成關聯關系,即在外表中建立外鍵約束。當向從表 stu 的 class_id 插入不存在于主表 myclass 的 id 列中的數據時,這里將插入失敗。當然,插入 null 會插入成功,表示當前還未進行分配班級。