MSQL常見約束

2021-10-11 16:11:38 字數 4937 閱讀 1374

新增約束可以在兩個時間點,一是在建立表時,二是在修改表結構時

行級約束案例:

drop

table

ifexists major;

create

table major(

id int

primary

key,

# 主鍵約束

name varchar

(255

)not

null

# 非空約束

)drop

table

ifexists student;

create

table student(

id int

primary

key,

# 主鍵約束

name varchar

(255

)not

null

,# 非空約束

gender char(1

)check

(gender=

'男'or gender=

'女')

,# 檢查約束

seat int

unique

,# 唯一約束

age int

default18,

# 預設值

majorid int

# foreign key references major(id) # 外來鍵約束這樣寫不支援

)

表級約束案例:

drop

table

ifexists major;

create

table major(

id int

, name varchar

(255),

constraint pk primary

key(id));

drop

table

ifexists student;

create

table student(

id int

, name varchar

(255),

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_student_major foreign

key(majorid)

references major(id)

)

結合使用desc table_nameshow index from table_name檢視表的約束,建立聯合主鍵時需要定義為表級主鍵約束

一般的通用寫法是除了外來鍵,其他的都定義為行級約束,例如:

drop

table

ifexists student;

drop

table

ifexists major;

create

table major(

id int

, name varchar

(255),

constraint pk primary

key(id));

create

table student(

id int

primary

key,

# 主鍵約束

name varchar

(255

)not

null

,# 非空約束

gender char(1

)check

(gender=

'男'or gender=

'女')

,# 檢查約束

seat int

unique

,# 唯一約束

age int

default18,

# 預設值

majorid int

,constraint fk_student_major foreign

key(majorid)

references major(id)

)

# 增加非空約束

alter

table student modify

column name varchar

(255

)not

null

;# 增加預設值約束

alter

table student modify

column age int

default18;

# 增加列級主鍵約束

alter

table student modify

column id int

primary

key;

# 增加表級主鍵約束

alter

table student add

primary

key(id)

;# 增加列級唯一性約束

alter

table student modify

column seat int

unique

;# 增加表級唯一性約束

alter

table student add

unique

(seat)

;# 增加外來鍵約束

alter

table student add

foreign

key(majorid)

references major(id)

;

總結:

# 1. 增加列級約束

alter

table 表名 modify

column 欄位名 字段型別 新約束;

# 2. 增加表級約束

alter

table 表名 add

[constraint 約束名] 約束型別(欄位名)

[外來鍵引用 其他表(其他表字段)

]

刪除約束其實就是修改表的列結構

# 刪除非空約束

alter

table student modify

column name varchar

(255);

# 刪除預設值約束

alter

table student modify

column age int

;# 刪除列級主鍵約束

alter

table student modify

column id int

;# 刪除表級主鍵約束

alter

table student drop

primary

key;

# 刪除列級唯一性約束

alter

table student modify

column seat int

;# 刪除表級唯一性約束

alter

table student drop

index seat;

# 刪除外來鍵約束

alter

table student drop

foreign

key majorid;

在列後面加上auto_increment即可,注意乙個表只能有乙個標示列

drop

table

ifexists student;

drop

table

ifexists major;

create

table major(

id int

, name varchar

(255),

constraint pk primary

key(id));

create

table student(

id int

primary

keyauto_increment

,# 主鍵約束

name varchar

(255

)not

null

,# 非空約束

gender char(1

)check

(gender=

'男'or gender=

'女')

,# 檢查約束

seat int

unique

,# 唯一約束

age int

default18,

# 預設值

majorid int

,constraint fk_student_major foreign

key(majorid)

references major(id)

)

可以通過修改系統變數auto_increment_increment來修改步長

# 檢視變數

show variables like

'%auto_increment%'

# 修改變數

set auto_increment_increment=

3

Msql 約束和索引

3 主鍵約束分為兩種 4 刪除主鍵約束 第一種 在建立表時如何指定主鍵的約束?create table 資料庫名.表名稱 欄位名1 資料型別 primary key,欄位名2 資料型別,例如 在test資料庫中建立乙個t stu表 建立了主鍵,它作用的體現?例如 在表中插入兩條資料,其中資料中主鍵的...

MySql DDL 常見約束

含義 一種限制,用於限制表中的資料,為了保證表中的資料的準確和可靠性 分類 六大約束 新增約束的時機 1.建立表時 2.修改表時 1 新增列級約束 語法 直接在欄位名和型別後面追加 約束型別即可 只支援 預設 非空 主鍵 唯一 create table stuinfo id int primary ...

MySQL常見約束

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