MySQL學(xué)習(xí)筆記4:完整性約束限制字段
更新時(shí)間:2013年01月02日 10:54:02 作者:
完整性約束是對(duì)字段進(jìn)行限制,從而符合該字段達(dá)到我們期望的效果比如字段含有默認(rèn)值,不能是NULL等如果插入的數(shù)據(jù)不滿足限制要求,數(shù)據(jù)庫(kù)管理系統(tǒng)就拒絕執(zhí)行操作
完整性約束是對(duì)字段進(jìn)行限制,從而符合該字段達(dá)到我們期望的效果比如字段含有默認(rèn)值,不能是NULL等
直觀點(diǎn)說(shuō):如果插入的數(shù)據(jù)不滿足限制要求,數(shù)據(jù)庫(kù)管理系統(tǒng)就拒絕執(zhí)行操作
設(shè)置表的主鍵
主鍵能夠標(biāo)識(shí)表中每條信息的唯一性,如同身份證號(hào)碼和人的關(guān)系
人可以同名,但是身份證號(hào)碼卻是唯一的,
創(chuàng)建主鍵的目的在于快速查找到表中的某一條信息
單字段主鍵
mysql> create table student(
-> id int primary key,
-> name varchar(20),
-> sex boolean
-> );
Query OK, 0 rows affected (0.09 sec)
創(chuàng)建了三個(gè)字段,其中id為主鍵
多字段主鍵
多字段主鍵由多個(gè)屬性組合而成,在屬性定義完之后統(tǒng)一設(shè)置主鍵
mysql> create table student2(
-> id int,
-> course_id int,
-> score float,
-> primary key(id,course_id)
-> );
Query OK, 0 rows affected (0.11 sec)
student2表有三個(gè)字段,其中id和course_id的組合可以確定唯一的一條記錄
設(shè)置表的外鍵
表的外鍵與主鍵是相對(duì)應(yīng)的,比如表A中的id是外鍵,表B中的id是主鍵
那么就可以稱表B為父表,表A為子表
設(shè)置表外鍵的作用在于建立與父表的聯(lián)系,比如表B中id為123的學(xué)生刪除后,表A中id為123的記錄也隨著消失
這樣做的目的在于保證表的完整性
mysql> create table student3(
-> id int primary key,
-> course_id int,
-> teacher varchar(20),
-> constraint fk foreign key(id,course_id)
-> references student2(id,course_id)
-> );
Query OK, 0 rows affected (0.12 sec)
這里創(chuàng)建student3表,constraint后面的fk是外鍵別名,foreign key也就是設(shè)置外鍵的字段
references后的內(nèi)容表示父表,和父表中的主鍵
需要注意的是,父表中的主鍵不能為空,并且主鍵和外鍵的數(shù)據(jù)類型要一致
設(shè)置表的非空約束
非空性很好理解,就是設(shè)置表中字段的值不能為空(NULL)
如果在已經(jīng)設(shè)置此約束性條件的字段中插入空值,數(shù)據(jù)庫(kù)系統(tǒng)則會(huì)報(bào)錯(cuò)
mysql> create table student4(
-> id int not null,
-> name varchar(20),
-> sex boolean
-> );
Query OK, 0 rows affected (0.10 sec)
這里的not null就是約束條件
設(shè)置表的唯一性約束
唯一性是指表中該字段的值不能重復(fù)出現(xiàn),設(shè)置表的唯一性約束
也就是給表中某個(gè)字段加上unique
mysql> create table student5(
-> id int unique,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.10 sec)
此處id字段便不可重復(fù)
設(shè)置表的屬性值自動(dòng)增加
auto_increment主要用于為表中插入的新記錄自動(dòng)生成唯一的ID
一個(gè)表只能有一個(gè)字段使用auto_increment約束
并且該字段必須為主鍵的一部分
mysql> create table student6(
-> id int primary key auto_increment,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.12 sec)
這里的id是主鍵,并且會(huì)自動(dòng)增加id值,比如1,2,3,4……
需要注意的是,auto_increment約束的值必須是整數(shù)類型
設(shè)置表中屬性的默認(rèn)值
在表中插入一條新的記錄時(shí),如果沒(méi)有為該字段賦值
那么數(shù)據(jù)庫(kù)系統(tǒng)會(huì)自動(dòng)為該字段賦上一條默認(rèn)值
mysql> create table student7(
-> id int primary key,
-> score int default 0
-> );
Query OK, 0 rows affected (0.10 sec)
直觀點(diǎn)說(shuō):如果插入的數(shù)據(jù)不滿足限制要求,數(shù)據(jù)庫(kù)管理系統(tǒng)就拒絕執(zhí)行操作
設(shè)置表的主鍵
主鍵能夠標(biāo)識(shí)表中每條信息的唯一性,如同身份證號(hào)碼和人的關(guān)系
人可以同名,但是身份證號(hào)碼卻是唯一的,
創(chuàng)建主鍵的目的在于快速查找到表中的某一條信息
單字段主鍵
復(fù)制代碼 代碼如下:
mysql> create table student(
-> id int primary key,
-> name varchar(20),
-> sex boolean
-> );
Query OK, 0 rows affected (0.09 sec)
創(chuàng)建了三個(gè)字段,其中id為主鍵
多字段主鍵
多字段主鍵由多個(gè)屬性組合而成,在屬性定義完之后統(tǒng)一設(shè)置主鍵
復(fù)制代碼 代碼如下:
mysql> create table student2(
-> id int,
-> course_id int,
-> score float,
-> primary key(id,course_id)
-> );
Query OK, 0 rows affected (0.11 sec)
student2表有三個(gè)字段,其中id和course_id的組合可以確定唯一的一條記錄
設(shè)置表的外鍵
表的外鍵與主鍵是相對(duì)應(yīng)的,比如表A中的id是外鍵,表B中的id是主鍵
那么就可以稱表B為父表,表A為子表
設(shè)置表外鍵的作用在于建立與父表的聯(lián)系,比如表B中id為123的學(xué)生刪除后,表A中id為123的記錄也隨著消失
這樣做的目的在于保證表的完整性
復(fù)制代碼 代碼如下:
mysql> create table student3(
-> id int primary key,
-> course_id int,
-> teacher varchar(20),
-> constraint fk foreign key(id,course_id)
-> references student2(id,course_id)
-> );
Query OK, 0 rows affected (0.12 sec)
這里創(chuàng)建student3表,constraint后面的fk是外鍵別名,foreign key也就是設(shè)置外鍵的字段
references后的內(nèi)容表示父表,和父表中的主鍵
需要注意的是,父表中的主鍵不能為空,并且主鍵和外鍵的數(shù)據(jù)類型要一致
設(shè)置表的非空約束
非空性很好理解,就是設(shè)置表中字段的值不能為空(NULL)
如果在已經(jīng)設(shè)置此約束性條件的字段中插入空值,數(shù)據(jù)庫(kù)系統(tǒng)則會(huì)報(bào)錯(cuò)
復(fù)制代碼 代碼如下:
mysql> create table student4(
-> id int not null,
-> name varchar(20),
-> sex boolean
-> );
Query OK, 0 rows affected (0.10 sec)
這里的not null就是約束條件
設(shè)置表的唯一性約束
唯一性是指表中該字段的值不能重復(fù)出現(xiàn),設(shè)置表的唯一性約束
也就是給表中某個(gè)字段加上unique
復(fù)制代碼 代碼如下:
mysql> create table student5(
-> id int unique,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.10 sec)
此處id字段便不可重復(fù)
設(shè)置表的屬性值自動(dòng)增加
auto_increment主要用于為表中插入的新記錄自動(dòng)生成唯一的ID
一個(gè)表只能有一個(gè)字段使用auto_increment約束
并且該字段必須為主鍵的一部分
復(fù)制代碼 代碼如下:
mysql> create table student6(
-> id int primary key auto_increment,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.12 sec)
這里的id是主鍵,并且會(huì)自動(dòng)增加id值,比如1,2,3,4……
需要注意的是,auto_increment約束的值必須是整數(shù)類型
設(shè)置表中屬性的默認(rèn)值
在表中插入一條新的記錄時(shí),如果沒(méi)有為該字段賦值
那么數(shù)據(jù)庫(kù)系統(tǒng)會(huì)自動(dòng)為該字段賦上一條默認(rèn)值
復(fù)制代碼 代碼如下:
mysql> create table student7(
-> id int primary key,
-> score int default 0
-> );
Query OK, 0 rows affected (0.10 sec)
相關(guān)文章
MySQL報(bào)錯(cuò)Expression #1 of SELECT list 
這篇文章主要介紹了MySQL報(bào)錯(cuò)Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09
MySQL?數(shù)據(jù)類型及最優(yōu)選取規(guī)則
這篇文章主要介紹了MySQL?數(shù)據(jù)類型及最優(yōu)選取規(guī)則,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-08-08
MySQL-group-replication 配置步驟(推薦)
下面小編就為大家?guī)?lái)一篇MySQL-group-replication 配置步驟(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
mysql實(shí)現(xiàn)本地keyvalue數(shù)據(jù)庫(kù)緩存示例
這篇文章主要介紹了代碼實(shí)現(xiàn)本地Key-Value緩存示例,大家參考使用吧2013-12-12
Mysql和SQLServer驅(qū)動(dòng)連接的實(shí)現(xiàn)步驟
本文主要介紹了Mysql和SQL?Server的驅(qū)動(dòng)連接,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
mysql優(yōu)化之慢查詢分析+explain命令分析+優(yōu)化技巧總結(jié)
這篇文章主要介紹了mysql優(yōu)化之慢查詢分析,explain命令分析,優(yōu)化技巧總結(jié),需要的朋友可以參考下2023-02-02

