含義: 一種限制,用於限制表中的資料,為了保證表中的資料準確和可靠性(一致性)
分類: 六大約束
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...