MySQL學習筆記4:完整性約束限制字段
更新時間:2013年01月02日 10:54:02 作者:
完整性約束是對字段進行限制,從而符合該字段達到我們期望的效果比如字段含有默認值,不能是NULL等如果插入的數據不滿足限制要求,數據庫管理系統(tǒng)就拒絕執(zhí)行操作
完整性約束是對字段進行限制,從而符合該字段達到我們期望的效果比如字段含有默認值,不能是NULL等
直觀點說:如果插入的數據不滿足限制要求,數據庫管理系統(tǒng)就拒絕執(zhí)行操作
設置表的主鍵
主鍵能夠標識表中每條信息的唯一性,如同身份證號碼和人的關系
人可以同名,但是身份證號碼卻是唯一的,
創(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)建了三個字段,其中id為主鍵
多字段主鍵
多字段主鍵由多個屬性組合而成,在屬性定義完之后統(tǒng)一設置主鍵
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表有三個字段,其中id和course_id的組合可以確定唯一的一條記錄
設置表的外鍵
表的外鍵與主鍵是相對應的,比如表A中的id是外鍵,表B中的id是主鍵
那么就可以稱表B為父表,表A為子表
設置表外鍵的作用在于建立與父表的聯系,比如表B中id為123的學生刪除后,表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也就是設置外鍵的字段
references后的內容表示父表,和父表中的主鍵
需要注意的是,父表中的主鍵不能為空,并且主鍵和外鍵的數據類型要一致
設置表的非空約束
非空性很好理解,就是設置表中字段的值不能為空(NULL)
如果在已經設置此約束性條件的字段中插入空值,數據庫系統(tǒng)則會報錯
mysql> create table student4(
-> id int not null,
-> name varchar(20),
-> sex boolean
-> );
Query OK, 0 rows affected (0.10 sec)
這里的not null就是約束條件
設置表的唯一性約束
唯一性是指表中該字段的值不能重復出現,設置表的唯一性約束
也就是給表中某個字段加上unique
mysql> create table student5(
-> id int unique,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.10 sec)
此處id字段便不可重復
設置表的屬性值自動增加
auto_increment主要用于為表中插入的新記錄自動生成唯一的ID
一個表只能有一個字段使用auto_increment約束
并且該字段必須為主鍵的一部分
mysql> create table student6(
-> id int primary key auto_increment,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.12 sec)
這里的id是主鍵,并且會自動增加id值,比如1,2,3,4……
需要注意的是,auto_increment約束的值必須是整數類型
設置表中屬性的默認值
在表中插入一條新的記錄時,如果沒有為該字段賦值
那么數據庫系統(tǒng)會自動為該字段賦上一條默認值
mysql> create table student7(
-> id int primary key,
-> score int default 0
-> );
Query OK, 0 rows affected (0.10 sec)
直觀點說:如果插入的數據不滿足限制要求,數據庫管理系統(tǒng)就拒絕執(zhí)行操作
設置表的主鍵
主鍵能夠標識表中每條信息的唯一性,如同身份證號碼和人的關系
人可以同名,但是身份證號碼卻是唯一的,
創(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)建了三個字段,其中id為主鍵
多字段主鍵
多字段主鍵由多個屬性組合而成,在屬性定義完之后統(tǒng)一設置主鍵
復制代碼 代碼如下:
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表有三個字段,其中id和course_id的組合可以確定唯一的一條記錄
設置表的外鍵
表的外鍵與主鍵是相對應的,比如表A中的id是外鍵,表B中的id是主鍵
那么就可以稱表B為父表,表A為子表
設置表外鍵的作用在于建立與父表的聯系,比如表B中id為123的學生刪除后,表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也就是設置外鍵的字段
references后的內容表示父表,和父表中的主鍵
需要注意的是,父表中的主鍵不能為空,并且主鍵和外鍵的數據類型要一致
設置表的非空約束
非空性很好理解,就是設置表中字段的值不能為空(NULL)
如果在已經設置此約束性條件的字段中插入空值,數據庫系統(tǒng)則會報錯
復制代碼 代碼如下:
mysql> create table student4(
-> id int not null,
-> name varchar(20),
-> sex boolean
-> );
Query OK, 0 rows affected (0.10 sec)
這里的not null就是約束條件
設置表的唯一性約束
唯一性是指表中該字段的值不能重復出現,設置表的唯一性約束
也就是給表中某個字段加上unique
復制代碼 代碼如下:
mysql> create table student5(
-> id int unique,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.10 sec)
此處id字段便不可重復
設置表的屬性值自動增加
auto_increment主要用于為表中插入的新記錄自動生成唯一的ID
一個表只能有一個字段使用auto_increment約束
并且該字段必須為主鍵的一部分
復制代碼 代碼如下:
mysql> create table student6(
-> id int primary key auto_increment,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.12 sec)
這里的id是主鍵,并且會自動增加id值,比如1,2,3,4……
需要注意的是,auto_increment約束的值必須是整數類型
設置表中屬性的默認值
在表中插入一條新的記錄時,如果沒有為該字段賦值
那么數據庫系統(tǒng)會自動為該字段賦上一條默認值
復制代碼 代碼如下:
mysql> create table student7(
-> id int primary key,
-> score int default 0
-> );
Query OK, 0 rows affected (0.10 sec)
相關文章
解決mysql ERROR 1017:Can''t find file: ''/xxx.frm'' 錯誤
如果重啟服務器前沒有關閉mysql,MySql的MyiSAM表很有可能會出現 ERROR #1017 :Can't find file: '/xxx.frm' 的錯誤2011-08-08
linux下改良版本mysqldump來備份MYSQL數據庫
我的備份腳本都是在凌晨執(zhí)行的,經常在慢查詢日志里面看到這樣的信息:select * from table1; 之前一直很納悶,最后才了解到原來是MYSQLDUMP搞的鬼。2008-07-07
利用Xtrabackup工具備份及恢復(MySQL DBA的必備工具)
Xtrabackup 是percona的一個開源項目,可以熱備份innodb ,XtraDB,和MyISAM(會鎖表),可以看做是InnoDB Hotbackup的免費替代品2013-04-04
MySQL:explain結果中Extra:Impossible?WHERE?noticed?after?rea
這篇文章主要介紹了MySQL:explain結果中Extra:Impossible?WHERE?noticed?after?reading?const?tables問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
關于MYSQL中每個用戶取1條記錄的三種寫法(group by xxx)
本篇文章是對MYSQL中每個用戶取1條記錄的三種寫法進行了詳細的分析介紹,需要的朋友參考下2013-07-07

