Mysql 主鍵約束PrimaryKey
Mysql 主鍵約束Primary Key
今天來簡單的講一下主鍵約束。
假如(ru)有一張學(xue)生(sheng)(sheng)信(xin)息表(biao),里面記錄了(le)學(xue)生(sheng)(sheng)的(de)(de)學(xue)號 ,姓名(ming),成績(ji)等,那么(me),會不會有兩(liang)個學(xue)號相同(tong)的(de)(de)學(xue)生(sheng)(sheng),答案肯定是(shi)(shi)否定的(de)(de),如(ru)果(guo)有的(de)(de)話也只能是(shi)(shi)插入信(xin)息的(de)(de)時候(hou)犯下的(de)(de)錯誤,那么(me)我們如(ru)何去避(bi)免這種錯誤呢,這時候(hou),primary key就發揮作(zuo)用了(le)。
下面(mian)我們(men)創(chuang)建一個stu_inform 表(biao)
create table stu_inform(
id int,
name varchar(20),
grade double,
primary key(id)
);
這樣(yang)的(de)話我們就為id 加上了(le)主(zhu)鍵約束,我們來插入(ru)一個錯誤的(de)信(xin)息
insert into stu_inform values(1,'張三',100.00),(1,'李四',100.00); -- Error
如果是(shi)這樣插入的(de)話環(huan)境會報出一個(ge)錯誤,這個(ge)錯誤正是(shi)主鍵約束的(de)作用(yong)。
但是如(ru)果你也想(xiang)讓姓名(ming)也不能(neng)相(xiang)同(tong),你可能(neng)會這樣寫(xie)
create table stu_inform(
id int,
name varchar(20),
grade double,
primary key(id,name)
);
接下來我(wo)們(men)插入一個數據
insert into stu_inform values(1,'張三',100.00),(1,'李四',100.00);
你會發現這條語(yu)句是(shi)完全可行的(de)(de),是(shi)完全沒有(you)錯誤的(de)(de),這是(shi)為什么呢,這是(shi)因(yin)為這是(shi)一個(ge)聯合主鍵(jian),它的(de)(de)作用是(shi)id不能(neng)重(zhong)(zhong)復 且 姓名也不能(neng)重(zhong)(zhong)復,注意(yi)是(shi)且。
你如果這樣寫的話
insert into stu_inform values(1,'張三',100.00),(1,'張三',100.00);//Error
你如果這樣寫的話就是大錯(cuo)特錯(cuo)了(le),因為這違反了(le)聯(lian)合(he)主鍵。因為id和(he)姓名同(tong)時(shi)相同(tong)了(le)就是這個道(dao)理(li)。
那么要怎樣才能(neng)(neng)實現id不(bu)能(neng)(neng)相(xiang)同(tong),同(tong)時姓名也不(bu)能(neng)(neng)相(xiang)同(tong)呢,這就是(shi)下一篇(pian)要講的unique的作(zuo)用了。
