約束
- 約束保證數(shù)據(jù)的完整性和一致性
- 約束分為表級約束和列級約束
- 約束類型包括:NOT NULL (非空約束),PRIMARY KEY(主鍵約束),UNIQUE KEY(唯一約束),DEFAULT(默認約束),F(xiàn)OREIGN(外鍵約束)
1.主鍵約束
- PRIMARY KEY
- 每張數(shù)據(jù)表只能存在一個主鍵
- 主鍵保證記錄的唯一性,主鍵的值不重復
- 主鍵自動為 NOT NULL
舉例,創(chuàng)建一張student表,將學號設置為主鍵創(chuàng)建完表之后,通過SHWO COLUMNS FROM student查看表結構
CREATE TABLE student(
id int PRIMARY KEY,
stu_name varchar(20)
);
2.唯一約束
- UNIQUE KEY
- 唯一約束可以保證記錄的唯一性
- 唯一約束的字段可以為空值(NULL)
- 每張數(shù)據(jù)表可以存在多個唯一約束
舉例,創(chuàng)建一個teacher表,id字段自增,tea_name唯一
CREATE TABLE teacher(
id int AUTO_INCREMENT PRIMARY KEY,
tea_name varchar(20) NOT NULL UNIQUE KEY
);
3.默認約束
- DEFAULT
- 當插入記錄時,如果沒有明確為字段賦值,則自動賦予默認值
舉例,創(chuàng)建一張course表,默認上課時間為40分鐘
CREATE TABLE course(
id int AUTO_INCREMENT PRIMARY KEY,
cou_name varchar(20) NOT NULL UNIQUE KEY,
time int DEFAULT 40
);
INSERT INTO course(cou_name) values('語文');
4.非空約束
- NOT NULL
- 強制列不能為 NULL 值,約束強制字段始終包含值。
- 這意味著,如果不向字段添加值,就無法插入新記錄或者更新記錄。
舉例,在 "Persons" 表創(chuàng)建時在 Id列、name列創(chuàng)建 not null 約束:
create table Persons(
id int not NULL,
p_name varchar(20) not null,
deparment varchar(20),
address varchar(20),
telNum varchar(20)
)
DESC Persons;
5.外鍵約束
- FOREIGN KEY
- 保持數(shù)據(jù)的一致性,完整性
- 實現(xiàn)1對1或1對n關系
1.父表與子表必須使用相同的存儲引擎,而且禁止使用臨時表。
2.數(shù)據(jù)表的存儲引擎只能是InnoDB
3.外鍵列和參照列必須具有相似的數(shù)據(jù)類型。其中數(shù)字的長度或是否有符號位必須相同;而字符的長度則可以不同。
4.外鍵列和參照列必須創(chuàng)建索引。如果外鍵列不存在索引的話,MySQL將自動創(chuàng)建索引。
CREATE TABLE school(
id int AUTO_INCREMENT PRIMARY KEY,
sname varchar(20) NOT NULL
);
CREATE TABLE student2(
id int AUTO_INCREMENT PRIMARY KEY,
sid int,
FOREIGN KEY (sid) REFERENCES school(id)
);
外鍵約束的參照操作
- CASCADE : 從父表刪除或更新且自動刪除或更新子表中匹配的行
- 父表中被引用的列刪除了某個數(shù)據(jù),子表中刪除對應數(shù)據(jù)的行
CREATE TABLE student3(
id int AUTO_INCREMENT PRIMARY KEY,
sid int,
FOREIGN KEY (sid) REFERENCES school(id) ON DELETE CASCADE
);
- SET NULL:從父表刪除或更新行,并設置子表的外鍵列為NULL。如果使用該項,必須保證子表列沒有指定NOT NULL
- 父表中刪除數(shù)據(jù),將子表中的引用設置為NULL
- RESTRICT:拒絕對父表的刪除或更新操作
- NO ACTION:標準SQL的關鍵字,在MySQL中與RESTRICT相同
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接
您可能感興趣的文章:- mysql完整性約束實例詳解
- MySQL約束超詳解
- MySQL中常見的六個約束類型詳解
- 基于MySQL數(shù)據(jù)庫的數(shù)據(jù)約束實例及五種完整性約束介紹
- MySQL學習之數(shù)據(jù)庫表五大約束詳解小白篇