Day102 常見約束 MySQL

2021-10-10 13:45:03 字數 4342 閱讀 1730

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

分類:	六大約束

not null: 非空,用於保證該字段的值不能為空,比如姓名、學號等

default: 預設,用於保證該字段的值有預設值,比如性別

primary key: 主鍵,用於保證該字段的值具有唯一性,並且非空,如學號、身份證、員工編號等

unique: 唯一,用於保證該字段的值具有唯一性,但是可以為空,如手機號、座位號

check: 檢查約束【mysql中不支援】,比如年齡、性別

foreign key: 外來鍵約束,用於限制兩個表的關係,用於保證該字段的值必須來自於主表的關聯列的值,

在從表中新增外來鍵約束,用於引用主表中某類的值,比如專業編號、員工的部門編號、工種編號

約束的新增分類

列級約束:

六大約束語法上都支援,但 foreign key 外來鍵約束沒有效果

表級約束:

除了非空、預設,其他都支援

主鍵和唯一的對比【面試題】★

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

主鍵 √ × 至少有乙個 √(不推薦)

唯一 √ √ 可以有多個 √(不推薦)

#外來鍵特點:

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

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

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

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

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

列級約束和表級約束的對比

位置 支援的約束型別 是否可以起約束名

列級約束: 列的後面 語法都支援,但外來鍵沒有效果 不支援

表級約束: 所有列的後面 預設鍵和非空鍵不支援,其他支援 支援(主鍵沒效果)

create table 表名(

欄位名 型別 約束,

欄位名 型別 列級約束,

表級約束

)

新增約束的時機: (資料新增之前)

1、建立表時

2、修改表時

語法:

直接在欄位名和字段型別後面追加 約束型別 即可

只支援: 預設、主鍵、非空、唯一

create table stuinfo(

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 references major(id)#外來鍵約束 ---不支援

); desc stuinfo;

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

show index from stuinfo;

語法:

各個欄位的最下面

【constraint 約束名】 約束型別(欄位名)

drop

table

ifexists stuinfo;

create

table stuinfo(

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)

#外來鍵 )

show

index

from stuinfo;

#通用寫法:

create

table

ifnot

exists stunifo(

id int

primary

key,

stuname varchar(20

)not

null

, gender char(1

),age int

default18,

seat int

unique

, majorid int

,constraint fk_stuinfo_major foreign

key(majorid)

references major(id)

)

語法:

1、新增列級約束

alter table 表名 modify column 欄位名 字段型別 新約束;

2、新增表級約束

alter table 表名 add 【constraint 約束名】約束型別(欄位名)【外來鍵引用】;

#1、新增非空約束

alter

table

`stunifo`

modify

column

`stuname`

varchar(12

)not

null

;#2、新增預設約束

alter

table

`stunifo`

modify

column

`age`

intdefault20;

#3、新增主鍵

#①列級約束寫法

alter

table

`stunifo`

modify

column

`id`

intprimary

key;

#②表級約束寫法

alter

table

`stunifo`

addprimary

key(id)

;#4、新增唯一鍵

#①列級約束寫法

alter

table

`stunifo`

modify

column

`seat`

intunique

;#②表級約束寫法

alter

table

`stunifo`

addunique

(seat)

;#5、新增外來鍵

alter

table

`stunifo`

addforeign

key(majorid)

references major(id)

;

#1、刪除非空約束

alter

table

`stunifo`

modify

column stuname varchar(20

)null

;#2、刪除預設約束

alter

table

`stunifo`

modify

column age int

;#3、刪除主鍵

alter

table

`stunifo`

modify

column id int

;alter

table

`stunifo`

drop

primary

key;

#4、刪除唯一鍵

alter

table

`stunifo`

drop

index seat;

#5、刪除外來鍵約束

alter

table

`stunifo`

drop

foreign

key majorid;

Day102 資料型別 MySQL

常見數值型別 數值型 整型小數 定點數浮點數 字元型 較短的文字 char varchar 較長的文字 text blob 較長的二進位制資料 日期型 分類 tinyint smallint mediumint int integer bigint 1位元組 2位元組 3位元組 4位元組 8位元組 ...

MySQL常見約束

1 含義 一種限制,用於限制表中的資料,為了保證表中的資料的準確和可靠性 2 分類 六大約束 not null 非空,用於保證該字段的值不能為空 比如姓名 學號等 default 預設,用於保證該字段有預設值 比如性別 primary key 主鍵,用於保證該字段的值具有唯一性,並且非空 比如學號 ...

mysql常見約束

2.2 修改表時 三 刪除外來鍵 總結語法 欄位名和型別後面追加 約束型別即可。支援範圍 預設 非空 主鍵 唯一 use students drop table stuinfo create table major id int primary key,majorname varchar 20 cr...