SQL教程——常見的約束型別

請保持優秀。發表於2020-12-01

本教程中所使用的資料庫的建表語句都在“SQL教程——索引”這篇文章中,點選連結直達:索引&建表語句

摘要:本文主要介紹SQL的DDL語法

目錄

常見的約束型別

一、建立表時新增約束

1.新增列級約束

2.新增表級約束

二、刪除表時刪除約束

1.刪除非空約束

2.刪除預設約束

3.刪除主鍵

4.刪除唯一

5.刪除外來鍵

三、表示列


常見的約束型別

 

含義:一種限制,用於限制表中的資料,為了保證表中的資料的準確性和可靠性

 

分類:六大約束

  1. not null:非空,用於保證該欄位的值不能為空

    比如姓名,學號等

  2. default:預設,用於保證該欄位的預設值

    比如性別,成績

  3. unique:唯一,用於儲存該欄位的值具有唯一性,可以為空

    比如座位號

  4. check:檢查約束【MySQL中不支援】

  5. primary key:主鍵,用於保證該欄位的值具有唯一性,並且非空

    比如學號,員工編號等

  6. foreign key:外來鍵,用於限制兩個表的關係,用於保證該欄位的值必須來自於主表的關聯列的值

    在從表中新增限制,用於引用主表中某列的值

     

新增約束的時機:

  1. 建立表時

  2. 修改表時

 

約束的新增分類:

  1. 列級約束:六大約束語法上都支援,但外來鍵約束沒有效果。

  2. 表級約束:除了非空、預設,其它都支援。

 

主鍵和唯一的大對比:

                        保證唯一性          是否允許為空               一個表中可以有多個               是否允許組合

    主鍵             √                           x                                  只有一個                                 √,但不推薦

    唯一             √                           √                                  可以有多個                             √,但不推薦

 

外來鍵:

  1. 要求在從表設定外來鍵關係

  2. 從表的外來鍵列的型別和主表的關聯列的型別要求一致或相容,名稱無要求。

  3. 主表的關聯列必須是一個key(一般是主鍵或是唯一)

  4. 插入資料時,先插入主表,再插入從表

    刪除資料時,先刪除從表,再刪除主表

    

    insert into major values(1, 'java');

    insert into major values(2, 'h5');
create table 表名(

    欄位名 欄位型別 列級約束,

    欄位名 欄位型別,

    表級約束

);

 

一、建立表時新增約束

 

1.新增列級約束

create table stunifo(

    id int primary key, #主鍵

    stuName varchar(20) not null, #非空

    gender char(1) check(gender = '男' or gender = '女'), #檢查

    seat int unique, #唯一

    age int default 18, #預設約束

    majorId int foreign key references major(id) #外來鍵

);
create table major(

    id int primary key,

    majorName varhcar(20)

);
#檢視stuinfo表中所有的索引,包括主鍵,外來鍵和唯一

show index from stuinfo;

 

2.新增表級約束

dop table if exists stuinfo;

create table stunifo(

    id int, 

    stuName varchar(20), 

    gender char(1), 

    seat int, 

    age int , 

    majorId int ,

    

    constraint pk primary key(id),

    constraint uq unique(seat),

    constraint ck check(gender = '男' or gender = '女'), 

    constraint fk_stuinfo_major foreign key(majorid) references major(id)

);

 

通用寫法:

 

二、刪除表時刪除約束

1.刪除非空約束

alter table stuinfo modify column stuname varhcar(20) null;

 

2.刪除預設約束

alter table stuinfo modify column age int;

 

3.刪除主鍵

alter table stuinfo drop primary key;

 

4.刪除唯一

alter table stuinfo drop index seat;

 

5.刪除外來鍵

alter table stuinfo drop foreign key



show index from stuinfo

三、表示列

 

含義:可以不用手動插入值,系統提供的預設的序列值

特點:

  1. 標識列所在的列必須是一個key(primary key 或者 unique)

  2. 一張表至多有一個標識列

  3. 標識列的型別必須是數值型

  4. 標識列可以通過set auto_increment_increment = 3; 來設定步長

    可以通過手動插入值來設定起始值

id int primary key auto_increment;

 

相關文章