MySQL八大约束
MySQL約束
- MySQL約束
- 主鍵約束(primary key)
- 自增長約束(auto_increment)
- 非空約束(not null)
- 唯一約束(unique)
- 默認約束(default)
- 零填充約束(zerofill)
- 外鍵約束(foreign key)
MySQL約束
概念
- 約束英文:constraint
- 約束實際上就是表中數據的限制條件
作用
- 表在設計的時候加入約束的目的就是為了保證表中的記錄完整性和有效性,比如用戶表有些列的值(手機號)不能為空,有些列的值(身份證號)不能重復。
分類
- 主鍵約束(primary key) PK
- 自增長約束(auto_increment)
- 非空約束(not null)
- 唯一性約束(unique)
- 默認約束(default)
- 零填充約束(zerofill)
- 外鍵約束(foreign key) FK
主鍵約束(primary key)
概念
操作
- 添加單列主鍵
創建單列主鍵有兩種方式,一種是在定義字段的同時指定主鍵,一種是定義完字段之后指定主鍵
方式1-語法
-- 在 create table 語句中,通過 PRIMARY KEY 關鍵字來指定主鍵。 --在定義字段的同時指定主鍵,語法格式如下: create table 表名(...<字段名> <數據類型> primary key ... )方式1-實現
create table emp1(eid int primay key,name VARCHAR(20),deptId int,salary double );方式2-語法
--在定義字段之后再指定主鍵,語法格式如下: create table 表名(... [constraint <約束名>] primary key [字段名] );方式2-實現
create table emp2(eid INT,name VARCHAR(20),deptId INT,salary double,constraint pk1 primary key(id) );- 添加多列聯合主鍵
所謂的聯合主鍵,就是這個主鍵是由一張表中多個字段組成的。
注意:
當主鍵是由多個字段組成時,不能直接在字段名后面聲明主鍵約束。
一張表只能有一個主鍵,聯合主鍵也是一個主鍵
語法
create table 表名(...primary key (字段1,字段2,…,字段n) );實現
create table emp3( name varchar(20), deptId int, salary double, primary key(name,deptId) );- 通過修改表結構添加主鍵
主鍵約束不僅可以在創建表的同時創建,也可以在修改表時添加。
語法
create table 表名(... ); alter table <表名> add primary key(字段列表);實現
-- 添加單列主鍵 create table emp4(eid int, name varchar(20), deptId int, salary double, ); alter table emp4 add primary key(eid);- 刪除主鍵
一個表中不需要主鍵約束時,就需要從表中將其刪除。刪除主鍵約束的方法要比創建主鍵約束容易的多。
語法
alter table <數據表名> drop primary key;實現
-- 刪除單列主鍵 alter table emp1 drop primary key; -- 刪除聯合主鍵 alter table emp5 drop primary key;自增長約束(auto_increment)
概念
- 在 MySQL 中,當主鍵定義為自增長后,這個主鍵的值就不再需要用戶輸入數據了,而由數據庫系統根據定義自動賦值。每增加一條記錄,主鍵會自動以相同的步長進行增長。
- 通過給字段添加 auto_increment 屬性來實現主鍵自增長。
特點
- 默認情況下,auto_increment的初始值是 1,每新增一條記錄,字段值自動加 1。
- 一個表中只能有一個字段使用auto_increment約束,且該字段必須有唯一索引,以避免序號重復(即為主鍵或主鍵的一部分)。
- auto_increment約束的字段必須具備 NOT NULL 屬性。
- auto_increment約束的字段只能是整數類型(TINYINT、SMALLINT、INT、BIGINT 等。
- auto_increment約束字段的最大值受該字段的數據類型約束,如果達到上限,auto_increment就會失效。
操作
- 指定自增字段初始值
如果第一條記錄設置了該字段的初始值,那么新增加的記錄就從這個初始值開始自增。例如,如果表中插入的第一條記錄的 id 值設置為 n,那么再插入記錄時,id 值就會從 n 開始往上增加。
語法
字段名 數據類型 auto_increment方式1
-- 方式1,創建表時指定 create table t_user2 ( id int primary key auto_increment, name varchar(20) )auto_increment=100;方式2
-- 方式2,創建表之后指定 create table t_user3 ( id int primary key auto_increment, name varchar(20) ); alter table t_user2 auto_increment=100;知識點:delete和truncate在刪除后自增列的變化
非空約束(not null)
概念
- MySQL 非空約束(not null)指字段的值不能為空。對于使用了非空約束的字段,如果用戶在添加數據時沒有指定值,數據庫系統就會報錯。
操作
語法
方式1:<字段名><數據類型> not null; 方式2:alter table 表名 modify 字段 類型 not null;添加非空約束
-- 方式1,創建表時指定 create table t_user6 ( id int , name varchar(20) not null, address varchar(20) not null ); -- 方式2,修改表時指定 create table t_user7 ( id int , name varchar(20) , -- 指定非空約束 address varchar(20) -- 指定非空約束 ); alter table t_user7 modify name varchar(20) not null; alter table t_user7 modify address varchar(20) not null;刪除非空約束
-- alter table 表名 modify 字段 類型 alter table t_user7 modify name varchar(20) ; alter table t_user7 modify address varchar(20) ;唯一約束(unique)
概念
- 唯一約束(Unique Key)是指所有記錄中字段的值不能重復出現。例如,為 id 字段加上唯一性約束后,每條記錄的 id
值都是唯一的,不能出現重復的情況。
操作
語法
方式1:<字段名> <數據類型> unique 方式2: alter table 表名 add constraint 約束名 unique(列);添加唯一約束
-- 方式一 create table t_user8 ( id int , name varchar(20) , phone_number varchar(20) unique -- 指定唯一約束 ); -- 方式二 create table t_user9 ( id int , name varchar(20) , phone_number varchar(20) -- 指定唯一約束 ); alter table t_user9 add constraint unique_ph unique(phone_number);刪除唯一約束
-- alter table <表名> drop index <唯一約束名>; alter table t_user9 drop index unique_ph;默認約束(default)
概念
- MySQL 默認值約束用來指定某列的默認值。
操作
語法
方式1: <字段名> <數據類型> default <默認值>; 方式2: alter table 表名 modify 列名 類型 default 默認值;添加默認約束
--方式一 create table t_user10 ( id int , name varchar(20) , address varchar(20) default ‘北京’ -- 指定默認約束 ); -- alter table 表名 modify 列名 類型 default 默認值; create table t_user11 ( id int , name varchar(20) , address varchar(20) ); alter table t_user11 modify address varchar(20) default ‘北京’;刪除默認約束
-- alter table <表名> modify column <字段名> <類型> default null; alter table t_user11 modify column address varchar(20) default null;零填充約束(zerofill)
概念
- 插入數據時,當該字段的值的長度小于定義的長度時,會在該值的前面補上相應的
- zerofill默認為int(10)
- 當使用zerofill
時,默認會自動加unsigned(無符號)屬性,使用unsigned屬性后,數值范圍是原值的2倍,例如,有符號為-128+127,無符號為0256。
操作
create table t_user12 ( id int zerofill , -- 零填充約束name varchar(20) );刪除零填充約束
alter table t_user12 modify id int;外鍵約束(foreign key)
概念
- 外鍵約束(FOREIGN KEY)是表的一個特殊字段,經常與主鍵約束一起使用。對于兩個具有關聯關系的表而言,相關聯字段中主鍵所在的表就是主表(父表),外鍵所在的表就是從表(子表)。
特點
- 主表必須已經存在于數據庫中,或者是當前正在創建的表。
- 必須為主表定義主鍵。
- 主鍵不能包含空值,但允許在外鍵中出現空值。也就是說,只要外鍵的每個非空值出現在指定的主鍵中,這 個外鍵的內容就是正確的。
- 在主表的表名后面指定列名或列名的組合。這個列或列的組合必須是主表的主鍵或候選鍵。
- 外鍵中列的數目必須和主表的主鍵中列的數目相同。
- 外鍵中列的數據類型必須和主表主鍵中對應列的數據類型相同。
操作
語法
--方式一 [constraint <外鍵名>] foreign key 字段名 [,字段名2,…] references <主表名> 主鍵列1 [,主鍵列2,…] --方式二 alter table <數據表名> add constraint <外鍵名> foreign key(<列名>) >references <主表名> (<列名>);總結
- 上一篇: 【JS 逆向百例】Fiddler 插件
- 下一篇: 《英雄联盟》今日更新12.12版本:首个