MySQL-約束
約束的定義
約束是一種限制,它通過對錶的行和列的限制,實現準確性、完整性、一致性
常見的約束類型
MySQL中我們常用到的約束有
約束類型 | 非空約束 | 唯一約束 | 默認約束 | 主鍵約束 | 外鍵約束 |
---|---|---|---|---|---|
關鍵字 | not null | unique | default | primary key | foreign key |
表級約束與列級約束
- 表級約束:對多個字段創建約束,在列定義後添加
- 列級約束:對一個字段創建的約束,可以在列定義時添加也可以通過修改列結構時添加
- 主鍵、外鍵、唯一可作爲表級約束也可以作爲列級約束
- 非空、默認只能作爲列級約束
例子
下面是例子的表結構,comment爲註釋,以下的操作均使用本例子
create table me(
id int,
name varchar(20) comment '姓名',
phone varchar(20) comment '手機號',
site varchar(20) comment '地址',
);
非空約束(NOT NULL)
非空約束指定某一字段不能爲空,使用非空約束後添加數據時字段不可爲空
在創建表時添加非空約束
使用方法直接在字段後面添加非空約束
name varchar(20) not null,
修改表結構時添加非空約束
使用格式:alter table <表名> modify <字段名> <數據類型> not null ;
alter table me modify name varchar(20) not null;
刪除非空約束
刪除非空約束時和添加一樣,修改表結構不加not null就可以
alter table me modify name varchar(20);
唯一約束(UNIQUE)
唯一約束使表中的某一列的數據爲唯一,重複即報錯,可爲空
在創建表時添加唯一約束
使用方法直接在字段後面添加唯一約束
name varchar(20) unique,
修改表結構時添加唯一約束
使用格式:alter table <表名> modify <字段名> <數據類型> unique ;
以下爲三種方法,第三種方式中的uk_name爲唯一約束名
alter table me modify name varchar(20) unique;
alter teble me add unique(name);
alter table me add constraint uk_name unique(name);
刪除唯一約束
alter table me drop index name;
alter table me drop key uk_name;
聯合唯一約束
使多個字段(列)聯合一起的唯一約束,聯合唯一約束就要使用到了表級約束
以下添加name,phone的聯合唯一約束,表示name和phone聯合是唯一的,單個不唯一
添加一條數據時name與phone與數據中的name與phone都相同時出現報錯,只有name或者phone相同不會報錯
alter table me add constraint uk_phone unique(name,phone); #添加聯合唯一約束
alter table me drop key uk_phone; #刪除聯合唯一約束
默認約束(DEFAULT)
默認約束爲列(字段)添加默認值,添加數據爲空時使用默認值
在創建表時添加默認約束
使用方法直接在字段後面添加默認約束
name varchar(20) default '周八',
修改表結構時添加默認約束
使用格式:alter table <表名> modify <字段名> <數據類型> default ‘默認值’;
注意第二種方法中字段名(列名)編寫兩次
alter table me modify name varchar(20) default '周八';
alter table me change column name name varchar(20) default '周八';
刪除默認約束
刪除默認約束時和添加一樣,修改表結構不加default就可以
alter table me modify name varchar(20);
alter table me change column name name varchar(20) default null;
主鍵約束(PRIMARY KEY)
主鍵約束使其值能唯一地標識表中的每一行,主鍵約束的列裏的數據不能相同,不能爲空,一般配合自增使用
每個表中只能有一個主鍵,多個字段(列)的複合主鍵爲一個主鍵
在創建表時添加主鍵約束
使用方法直接在字段後面添加主鍵約束
name varchar(20) primary key,
修改表結構時添加主鍵約束
使用格式:alter table <表名> modify <字段名> <數據類型> primary key ;
以下爲三種方法,第三種方式中的pk_name爲主鍵約束名
alter table me modify name varchar(20) primary key;
alter teble me add primary key(name);
alter table me add constraint pk_name primary key(name);
刪除主鍵約束
alter table me drop primary key;
複合主鍵約束
複合主鍵約束指一個表中一個以上的字段(列)組成的主鍵,複合主鍵約束就要使用到了表級約束
以下添加name,phone的複合主鍵約束,表示name和phone組合起來的一個主鍵
通俗易懂的瞭解就是一個表中班級和姓名是一個複合主鍵,有個姓名出現在兩個班級裏,由於一個班級的人比較多而產生相同的主鍵班級,但相同姓名不是一個班級這就是複合主鍵,如果同一個班級出現兩個相同的名字就違背的主鍵的唯一性原則
primary key(name,phone) #創建表時添加複合主鍵約束,在列定義後添加
alter table me add constraint pk_phone primary key(name,phone); #修改表時添加複合主鍵約束
alter table me drop primary key; #刪除複合主鍵約束
alter table me drop primary key,add primary key(name); #刪除複合主鍵中的單個方法爲刪除接添加,語句簡練。
複合主鍵與聯合主鍵
此爲其餘知識點
參考文章複合主鍵與聯合主鍵,本人的理解複合主鍵就是單表多字段,聯合主鍵就是多表多字段,但個人覺得聯合主鍵的多表並沒有太大的意義和用途
外鍵約束(FOREIGN KEY)
外鍵約束用來在兩個表的數據之間建立鏈接,外鍵約束可以有一列或者多列,一個表可以有一個或多個外鍵
外鍵對應的是參照完整性,一個表的外鍵可以爲空值,若不爲空值,則每一個外鍵的值必須等於另一個表中主鍵的某個值
外鍵對應的是另一個表的主鍵,定義外鍵後不可以刪除另一個表中關聯的行
兩個關聯的表中,存在主鍵的表爲主表,存在外鍵的表爲從表
在上面的例子上在添加一個mee表使用表級約束添加外鍵me_id,最後一行的fk_mee_me爲外鍵約束名,同時將me表的id字段添加主鍵約束
create table mee(
id int primary key,
me_id int,
score varchar(20) comment '成績',
number varchar(20) comment '學號',
constraint fk_mee_me foreign key(me_id) references me(id)
);
在修改表時添加外鍵約束
alter table mee add constraint fk_mee_me foreign key(me_id) references me(id);
刪除主鍵約束
alter table mee drop foreign key fk_mee_me;
以上均爲本人筆記,如有錯誤請指正,謝謝。