Mysql數(shù)據(jù)庫(kù)之約束條件詳解
一、主鍵約束
主鍵約束(PRIMARY KEY constraint)用于唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄。
語(yǔ)法:
create table 表名 ( 列名1 數(shù)據(jù)類(lèi)型 primary key, 列名2 數(shù)據(jù)類(lèi)型, ... );
在主鍵的后面添加:auto_increment, 可以讓主鍵自增。
設(shè)置auto_increment之后,可以不用設(shè)置id, id會(huì)自增。
創(chuàng)建表之后再創(chuàng)建主鍵的語(yǔ)法:alter table 表名 add primary key (列名1, 列名2, ...);
二、非空約束
非空約束是一種數(shù)據(jù)庫(kù)約束,用于確保表中的某個(gè)列不接受空值。當(dāng)為表的某個(gè)列定義了非空約束后,插入或更新該列時(shí),必須提供非空的值。
語(yǔ)法:
create table 表名 ( 列名 數(shù)據(jù)類(lèi)型 not null, ... );
創(chuàng)建表之后再設(shè)置非空的語(yǔ)法:alter table 表名 modify 列名 數(shù)據(jù)類(lèi)型 not null;
三、唯一約束
唯一約束是一種數(shù)據(jù)庫(kù)約束,用于確保表中的某個(gè)列或一組列的值是唯一的,即不允許重復(fù)值。唯一約束是一種數(shù)據(jù)完整性措施,它可以保證數(shù)據(jù)的唯一性和一致性。
語(yǔ)法:
create table 表名 ( 列名2 數(shù)據(jù)類(lèi)型 unique, ... );
在創(chuàng)建好的表中添加唯一約束:alter table 表名 add constraint 約束名 unique (列名1, 列名2, ...);
四、默認(rèn)值約束
默認(rèn)值約束是一種數(shù)據(jù)庫(kù)約束,用于在插入數(shù)據(jù)時(shí),如果未顯式為列指定值,則自動(dòng)使用指定的默認(rèn)值,是一種數(shù)據(jù)完整性措施,它確保了在缺少顯式值的情況下,表中的列始終具有默認(rèn)值。
語(yǔ)法:
Create table 表名 ( 列名1 數(shù)據(jù)類(lèi)型 default 默認(rèn)值, 列名2 數(shù)據(jù)類(lèi)型 default 默認(rèn)值, ... );
在創(chuàng)建好的表中添加默認(rèn)值約束:alter table 表名 alter colum 列名 set default 默認(rèn)值;
五、外鍵約束
外鍵約束是一種數(shù)據(jù)庫(kù)約束,用于在相關(guān)表之間建立關(guān)聯(lián)關(guān)系,保持?jǐn)?shù)據(jù)的完整性和一致性。
外鍵約束可以確保在一個(gè)表中的列值必須在另一個(gè)表中存在。
語(yǔ)法:
Create table 表名 ( 列名1 數(shù)據(jù)類(lèi)型, 列名2 數(shù)據(jù)類(lèi)型, ... foreign key (列名) references 關(guān)聯(lián)表名(關(guān)聯(lián)列名) );
例:作者和文章的關(guān)系是:1:N, 外鍵存在多的一方,所以外鍵設(shè)在文章表, 所以先創(chuàng)建作者表。
創(chuàng)建作者表:
創(chuàng)建文章表,并設(shè)置外鍵:
在創(chuàng)建好的表中添加外鍵約束(約束名自己命名):
alter table 表名 add constraint 約束名 foreign key (列名) references 關(guān)聯(lián)表名(關(guān)聯(lián)列名);
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
實(shí)現(xiàn)MySQL回滾的Python腳本的編寫(xiě)教程
這篇文章主要介紹了實(shí)現(xiàn)MySQL回滾的Python腳本的編寫(xiě)教程,文中的回滾針對(duì)的是DELETE語(yǔ)句的數(shù)據(jù)庫(kù)誤操作,需要的朋友可以參考下2015-11-11MySQL開(kāi)啟慢查詢?nèi)罩緇og-slow-queries的方法
MySQL中提供了一個(gè)慢查詢的日志記錄功能,可以把查詢SQL語(yǔ)句時(shí)間大于多少秒的語(yǔ)句寫(xiě)入慢查詢?nèi)罩荆粘>S護(hù)中可以通過(guò)慢查詢?nèi)罩镜挠涗浶畔⒖焖贉?zhǔn)確地判斷問(wèn)題所在2016-05-05一文搞定MySQL binlog/redolog/undolog區(qū)別
這篇文章主要介紹了一文搞定MySQL binlog/redolog/undolog區(qū)別,作為開(kāi)發(fā),我們重點(diǎn)需要關(guān)注的是二進(jìn)制日志(binlog)和事務(wù)日志(包括redo log和undo log),本文接下來(lái)會(huì)詳細(xì)介紹這三種日志,需要的朋友可以參考下2023-04-04MySQL中幾種數(shù)據(jù)統(tǒng)計(jì)查詢的基本使用教程
這篇文章主要介紹了幾種MySQL中數(shù)據(jù)統(tǒng)計(jì)查詢的基本使用教程,包括平均數(shù)和最大最小值等的統(tǒng)計(jì)結(jié)果查詢方法,是需要的朋友可以參考下2015-12-12MySql?explain命令返回結(jié)果詳細(xì)介紹
explain?是MySql提供的SQL語(yǔ)句查詢性能的工具,是我們優(yōu)化SQL的重要指標(biāo)手段,要看懂explain返回的結(jié)果集就尤為重要,這篇文章主要介紹了MySql?explain命令返回結(jié)果解讀,需要的朋友可以參考下2023-09-09MySQL中distinct和count(*)的使用方法比較
這篇文章主要針對(duì)MySQL中distinct和count(*)的使用方法比較,對(duì)兩者之間的使用方法、效率進(jìn)行了詳細(xì)分析,感興趣的小伙伴們可以參考一下2015-11-11