MySQL資料庫筆記6 約束Constraint

2021-10-06 09:19:42 字數 3309 閱讀 6907

1.什麼是約束(constraint)

在建立表的時候,可以給表的字段新增相應的約束,新增約束的目的是為了保證表中資料的合法性、有效性、完整性。

2.常見的約束

非空約束(not null):約束的字段不能為null。

唯一約束(unique):約束的字段不能重複,可以為空。

主鍵約束(primary key,pk):約束的字段既不能為null,也不能重複。

外來鍵約束(foreign key,fk)

檢查約束(check):oracle資料庫有check約束,但是mysql不支援該約束。

3.非空約束 not null

create table t_user(

id int,

username varchar(255) not null,

password varchar(255)

);insert into t_user(id,username,password) values(1,『lisi』,『123』);

4.唯一性約束

唯一約束修飾的字段具有唯一性,不能重複但可以為null(null不是值可以重複)。

案例1:給某一列新增unique約束。

create table t_user(

id int,

username varchar(255) unique //列級約束

);insert into t_user(id,username,password) values(1,『lisi』,『123』);

insert into t_user(id,username,password) values(2,『zhangsan』,『123』);

案例2:給兩個列或者多個列聯合新增unique約束。

create table t_user(

id int,

usercode varchar(255),

username varchar(255),

unique(usercode,username) //表級約束

);insert into t_user values(1,『111』,『zs』);

insert into t_user values(2,『111』,『ls』);

insert into t_user values(3,『222』,『zs』);

注意區別於:

create table t_user(

id int,

usercode varchar(255) unique,

username varchar(255) unique

);注意:非空約束not null,只有列級約束,沒有表級約束。

5.主鍵約束

* 主鍵中的資料既不能為null,也不能重複。一張表的主鍵約束只能有乙個

create table t_user(

id int primary key, //列級約束

username varchar(255) ,

email varchar(255)

);insert into t_user(id,username,email) values(1,『zs』,『[email protected]』);

insert into t_user(id,username,email) values(2,『ls』,『[email protected]』);

insert into t_user(id,username,email) values(3,『ww』,『[email protected]』);

* 主鍵有什麼作用:

- 表的設計三正規化中有要求,第一正規化就要求任何一張表都應該有主鍵。

- 主鍵的作用:主鍵值是這行記錄在這張表中的唯一標識。(就像身份證號)

* 主鍵的分類:

- 根據主鍵欄位和字段數量來劃分:

單一主鍵(推薦的,常用的)

復合主鍵:多個字段聯合起來新增乙個主鍵約束(不建議使用,因為復合主鍵違背三正規化)

- 根據主鍵的性質來劃分:

自然主鍵:主鍵值最好就是乙個和業務沒有任何關係的自然數(推薦使用)

業務主鍵:主鍵值和系統的業務掛鉤,例如:使用銀行卡號做主鍵,使用身份證號做主鍵(不推薦使用)

* 使用表級約束方式定義主鍵:

create table t_user(

id int,

username varchar(255) ,

primary key (id)

);復合主鍵:

create table t_user(

id int,

username varchar(255) ,

password varchar(255) ,

primary key (id,username)

);6.外來鍵約束* 業務背景:請設計資料庫表,用來維護學生和班級的資訊?

- 兩張表(班級表和學生表)

t_class: cno, cname

t_student: sno, sname,classno(該欄位新增外來鍵約束fk)

create table t_class(

cno int,

cname varchar(255),

primary key(cno)

);create table t_student(

sno int,

sname varchar(255),

classno int,

primary key(sno),

foreign key(classno) references t_class(cno)

);t_student中的classno欄位引用t_class表中的cno欄位,此時t_student表叫做子表,t_class表叫做父表

順序要求:

刪除資料的時候,先刪除子表,再刪除父表;

新增資料的時候,先新增父表,再新增子表;

建立表的時候,先建立父表,再建立子表;

刪除表的時候,先刪除子表,再刪除父表。

* 注意:

(1)外鍵值可以為null

(2)被引用的字段不一定是主鍵,但至少具有unique約束

MySQL資料庫 資料約束

對使用者操作表的資料進行約束 作用 當使用者對使用預設值的字段不插入值的時候,就使用預設值。注意 1 對預設值字段插入 null 是可以的 2 對預設值字段可以插入非 null create table student id int,name varchar 20 address varchar 2...

Mysql資料庫 約束型別

mysql資料庫的約束型別有 主鍵約束 primary key 外來鍵約束 foreign key 非空約束 not null 唯一性約束 unique 預設約束 default 一.主鍵約束 primary key 主鍵約束要求主鍵列的資料唯一,並且不能為空。主鍵分為兩種型別 單字段主鍵和多字段聯...

mysql資料庫之約束

約束是一種限制,它通過對錶的行或列的資料做出限制,來確保標的資料完整性 唯一性。1 非空約束 not null 欄位的值不能為空 1.1 建立表時新增非空約束 1.2 修改表時新增非空約束 1.3 刪除非空約束 2 唯一約束 unique 要求該列唯一,允許為空,唯一約束可以確保一列或者幾列不出現重...