主鍵(primary key)和唯一鍵(unique) 知識(shí)點(diǎn)總結(jié)

Primary key

  • 概念
    主鍵用于唯一標(biāo)識(shí)表中的每一條數(shù)據(jù)

  • 主鍵的特征:
    不能重復(fù), 不能為空

示例

create table if not exists stu(
    id int auto_increment primary key, <------#主建
    name varchar(20)
);
注意點(diǎn):

auto_increment的字段必須是主鍵, 但是主鍵不一定是auto_increment的, 只要是唯一的就可以 一個(gè)表只能有一個(gè)主鍵, 但是主鍵可以是1個(gè)或多個(gè)字段組成

auto_increment 自增長
1. 自增長字段的值從1開始, 每次遞增1
2. 自增長字段數(shù)據(jù)不可以重復(fù), 合適生成唯一的id
3. 自增長字段可以使用null或者default來設(shè)置值
4. 自增長字段必須是主鍵 (primary key)

示例演示

示例1

# 錯(cuò)誤示例

create table if not exists stu2(
    id int auto_increment, <------#會(huì)報(bào)錯(cuò), 自增長的字段必須是主鍵
    name varchar(20)
);

示例2

create table if not exists stu2(
    id int primary key, <------#不會(huì)報(bào)錯(cuò), 主鍵不一定是自增長的
    name varchar(20)
);

#如果主鍵不是自增長的, 那么不能為空 

#主鍵不能重復(fù)

示例3

# 錯(cuò)誤示例

create table if not exists stu3(
    id1 int primary key,
    id2 int primary key, <------#一張表只能有一個(gè)主鍵
    name varchar(20)
);

#正確的寫法

create table if not exists stu3(
    id1 int primary key,
    id2 int,
    name varchar(20)
);

示例4

#指定主鍵的第二種格式

create table if not exists stu4(
    id1 int,
    id2 int,
    name varchar(20),
    primary key(id1) 
);

示例5

create table if not exists stu6(
    id int,
    name varchar(20)
);

# 沒有主鍵的情況下添加主建
alter table stu6 add primary key(id);


示例6

# 聯(lián)合主建
create table if not exists stu5(
    id1 int,
    id2 int,
    name varchar(20),
    primary key(id1,id2)
);

#不是指定兩個(gè)主鍵, 一個(gè)primary key就是指定一個(gè)主鍵
#這里只出現(xiàn)了一個(gè)primary key, 所以只指定了一個(gè)主鍵
#只不過這個(gè)主鍵比較特殊, 是由兩個(gè)字段共同組成的
聯(lián)合主鍵的應(yīng)用場景:
  1. 如下一張表無論哪一個(gè)字段都無法保證數(shù)據(jù)的唯一性,
  2. 所以可以使用多個(gè)字段組合再一起保證數(shù)據(jù)的唯一性
企業(yè)開發(fā)中如何選擇主鍵?
  1. 最少性: 盡量選擇一個(gè)字段作為主鍵
  2. 穩(wěn)定性: 盡量選擇更新少的字段作為主鍵
  3. 盡量選擇整數(shù)類型的字段作為主鍵
  4. 結(jié)論: 搞一個(gè)id字段類型為int, 設(shè)置自動(dòng)增長, 作為主鍵

唯一鍵unique

作用

避免添加重復(fù)數(shù)據(jù), 也就是說如果想保證某一個(gè)字段的值永遠(yuǎn)不重復(fù), 那么就可以將這個(gè)字段設(shè)置為唯一鍵

注意點(diǎn):
  • 唯一鍵不是主鍵, 主鍵有一個(gè)特點(diǎn)是不能重復(fù), 但是唯一鍵不等于主鍵
  • 一張表中只能有一個(gè)主鍵, 但是一張表中可以有多個(gè)唯一鍵
示例1

create table if not exists stu1(
    id int auto_increment primary key,
    name varchar(20) <------ #可以添加重復(fù)數(shù)據(jù)
);


create table if not exists stu2(
    id int auto_increment primary key,
    name varchar(20) unique <------#不可以添加重復(fù)數(shù)據(jù)
);

#添加唯一鍵的第二種方式

create table if not exists stu(
    id int auto_increment primary key,
    name varchar(20),
    unique key(name) <------#給name添加唯一鍵 name不可以添加重復(fù)數(shù)據(jù)
);


示例3

create table if not exists stu(
    id int auto_increment primary key,
    name varchar(20)
);

alter table stu add unique(name); <------#指定唯一鍵

示例4
# 指定多個(gè)唯一鍵

create table if not exists stu11(
    id int auto_increment primary key,
    name varchar(20) unique,
    score int unique
);
刪除唯一鍵
格式
alter table 表名 drop index  唯一鍵字段名;

示例
alter table stu11 drop index name;  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喧务,一起剝皮案震驚了整個(gè)濱河市棒旗,隨后出現(xiàn)的幾起案子晶渠,更是在濱河造成了極大的恐慌,老刑警劉巖槽奕,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贡歧,居然都是意外死亡整胃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門拷获,熙熙樓的掌柜王于貴愁眉苦臉地迎上來篮撑,“玉大人,你說我怎么就攤上這事匆瓜∮浚” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵陕壹,是天一觀的道長质欲。 經(jīng)常有香客問我,道長糠馆,這世上最難降的妖魔是什么嘶伟? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮又碌,結(jié)果婚禮上九昧,老公的妹妹穿的比我還像新娘。我一直安慰自己毕匀,他們只是感情好铸鹰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著皂岔,像睡著了一般蹋笼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上躁垛,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天剖毯,我揣著相機(jī)與錄音,去河邊找鬼教馆。 笑死逊谋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的土铺。 我是一名探鬼主播胶滋,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悲敷!你這毒婦竟也來了究恤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤后德,失蹤者是張志新(化名)和其女友劉穎丁溅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體探遵,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窟赏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年妓柜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涯穷。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棍掐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拷况,到底是詐尸還是另有隱情作煌,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布赚瘦,位于F島的核電站粟誓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏起意。R本人自食惡果不足惜逞力,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一最楷、第九天 我趴在偏房一處隱蔽的房頂上張望慎颗。 院中可真熱鬧粟关,春花似錦、人聲如沸亲善。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛹头。三九已至顿肺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渣蜗,已是汗流浹背屠尊。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袍睡,地道東北人知染。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓肋僧,卻偏偏與公主長得像斑胜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子嫌吠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容