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;

以上均爲本人筆記,如有錯誤請指正,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章