完整性約束

2022-09-17 12:12:09 字數 3945 閱讀 7978

約束:

為什麼要使用約束?

為了保障資料的合法性,完整性

分類:not null:非空約束,資料不能為空

例如:學生表的姓名字段

create table student(id int,name char(10) not null,*** char(1) default "woman")

unique:唯一的約束,該字段的值不能重複,例如:身份證,手機號,學號

unique其實是一種索引,索引是一種資料結構,用於提高查詢效率,它可以為空,一張表中可以有多個唯一約束

單例唯一約束

create table t5(idcard char(18) unique);

多列聯合唯一約束

create table t6(idcard char(18),phonenumber char (11),unique(idcard,phonenumber));

意思: 身份證相同並且手機號相同,那就叫相同

primary key稱之為主鍵約束,用於唯一標識表中一條記錄

如何能做到唯一標識,該欄位只要是唯一的並且不為空即可 ,也就是從約束的角度來看主鍵約束和非空加唯一約束沒有區別。

那他們之間的區別是什麼?

唯一約束是一種索引,必然存在硬碟上的某個檔案中,是物理層面,primary key是一種邏輯意義上的資料,實際上不存在。

語法:create table stu(stuid int primary key,name char(3));

create table t7(id int unique not null,name char(3));

有主鍵和沒有主鍵的區別?

1.無法區分兩個相同記錄,比如班級裡的兩個人名字相同

2.有主鍵意味著有索引,效率更高

3.可以建立關聯聯絡

要不要主鍵

必需的,每個表都應該有主鍵,哪怕不用唯一標識,也應該考慮提公升效率,主鍵的欄位名幾乎都叫id

同乙個表中可不可以有多個主鍵?

不可以,沒有任何意義

主鍵的型別需要設定為整型

練習

建立乙個員工表 裡面儲存 員工資訊 員工編號 姓名 年齡 性別

create table employee (id int primary key,name char(10) not null,age int not null,*** char(10) default "

man"

); 插入資料

insert into employee values(1,"

楊總",20),(2,"

egon

",49),(3,"

wxx",28);

問題? 你很可能忘記上一次的id到第幾了 導致你要先檢視一下

麻煩影響效率 所以有了auto_increment

auto_increment ******中文 自動增長

作用 通常搭配主鍵字段使用 可以自動為你的資料分配逐漸

如何分配的?

新增一條就自動加1 計數從1開始

語法: ******create table t9(id int primary key auto_increment,name char(3));

如果主鍵是自動增長 你可以跳過這個字段 也可以為它插入null 都可以

修改自動增長的起始位置 **alter table t9 auto_increment = 7;

注意: 自動增長 只能用於整型

foreign key:專門用於為表和表之間建立物理關聯

思考:

兩個表之間能產生的關係頭哪些?

1.多對多;2.多對一;3.一對一;4.一對多

在查表之間的關係時,要站在不同的角度去思考。例如對乙個公司而言:

1. 從員工出發,員工對部門來說,多個員工對應乙個部門

2.從部門出發,乙個部門對應多個員工

如果兩個得到的關係不同,則認為這種多對一的關係時單向的

練習:設計學員表和班級表(外來鍵加到從表上)

create table

class (id int primary key auto_increment,name char(10),manager char(10));

create table student (id int primary key auto_increment,name char(10),manager char(10),c_id int,foreign key(c_id)references class(id));

總結:外來鍵的作用,表與表之間建立聯絡

新增 外來鍵約束時:產生的限制

被關聯的表需要先被建立,部門資料(主表)應該先插入,員工資料(從表)後插入,在刪除部門資料前,要保證該部門的員工資料都刪除了,在更新部門編號前,要先保證沒有員工關聯到這個部門

簡單來說,外鍵指的就是另一張的主鍵

外來鍵加上以後,主表中的資料刪除和更新時都受到限制

解決方案是為外來鍵新增級聯操作

級聯操作:指的就是同步更新和刪除

語法:在建立外來鍵時,在後面新增 on update cascade 同步更新;on delete cascade 同步刪除

例項:create table

class(id int primary key auto_increment,name char(10));

create table student(

id int primary key auto_increment,

name char(10),

c_id int,

foregin key(c_id) references

class

(id)

on update cascade

on delete cascade

);insert into

class vallue(null,"

python3期");

insert into student value(null,"張煜

"』,1)

對主表的id進行更新,以及刪除某條主表記錄,來驗證效果

多對多關係的處理:

建立乙個第三方表,專門儲存兩個表之間的關係,這個關係表應該有兩個字段,分別關聯學生的id和老師的id,為了保證資料刷的合法性,完整性給這兩個欄位都新增外來鍵約束

例項:

create table teacher(id int primary key auto_increment,name char(10));

create table student(id int primary key auto_increment,name char(10));

create table t_s(t_id int,

s_id int,

foregin key(t_id) referenses teacher(id),

foregin key(t_id) referenses student(id),

primary key(t_id,s)id));

insert into student value(null,

"lxx");

insert into teacher value(null,

"exx");

insert into t_s value(1,1);

例項

完整性約束

create table student tb id int notnull 非空約束 資料不允許為空 name varchar 255 null 顯式指定允許為空 新增非空約束 alter table 表名 modify column 屬性名 屬性型別 not null alter table s...

完整性約束

資料庫的完整性是指保護資料庫的有效性和正確性,防止資料庫中存在不符合語義的 不正確的資料。sql語言提供了相應的完整性約束機制,以確保將正確的資料儲存到資料庫中。完整性約束的型別 唯一約束 unique 用於表中的非主鍵字段,確保字段不會輸入重複的值,為其創造唯一索引 唯一鍵的值可以是null,但只...

SQL完整性約束

完整性約束保證授權使用者對資料庫所做的修改不會破壞資料的一致性。not null宣告禁止在該屬性上插入空值。任何可能導致向乙個宣告為not null的屬性插入空值的資料都會產生錯誤診斷資訊。unique aj 1 aj 2 aj m unique宣告指出aj 1 aj 2 aj m 形成了乙個候選碼...