新聞中心
MySQL是當(dāng)今更流行的數(shù)據(jù)庫管理系統(tǒng)之一,無論你是在開發(fā)網(wǎng)站還是企業(yè)應(yīng)用程序,都很可能使用MySQL來存儲和管理數(shù)據(jù)。在MySQL中,表是最基本的存儲單位,而表的主鍵則是表中數(shù)據(jù)行的唯一標(biāo)識符。本文將帶你學(xué)習(xí)如何正確設(shè)置MySQL表的主鍵。

創(chuàng)新互聯(lián)的客戶來自各行各業(yè),為了共同目標(biāo),我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括成都做網(wǎng)站、網(wǎng)站建設(shè)、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。
一、什么是主鍵
主鍵是一種用于唯一標(biāo)識表中數(shù)據(jù)行的列,所有主鍵值都必須是唯一的。如果表沒有主鍵,那么它將被視為無序,不方便進行有效的數(shù)據(jù)管理和查詢。因此,在設(shè)計數(shù)據(jù)庫表時,設(shè)置主鍵是非常重要的。
二、主鍵的作用
1. 唯一性約束:主鍵值必須是唯一的,如果試圖插入重復(fù)主鍵值的數(shù)據(jù),MySQL將拒絕該操作,從而保證數(shù)據(jù)的唯一性。
2. 快速查詢:主鍵可以作為索引,提高查詢效率。在MySQL中,如果表有主鍵,則會自動生成一個主鍵索引,加快查詢速度。
三、如何設(shè)置主鍵
MySQL中,有兩種設(shè)置主鍵的方式:使用單列主鍵和使用復(fù)合主鍵。
1. 單列主鍵
單列主鍵是指使用一列進行主鍵設(shè)置,該列的值必須唯一,且不為空。常見的單列主鍵類型有int、bigint、char、varchar等。
例如,以下代碼演示了如何使用單列主鍵設(shè)置表的主鍵:
“`sql
CREATE TABLE student
(
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
age INT NOT NULL,
gender CHAR(1) NOT NULL
);
“`
上面的代碼創(chuàng)建了一個名為student的表,其中id列被設(shè)置為主鍵。
2. 復(fù)合主鍵
復(fù)合主鍵是指使用多個列進行主鍵設(shè)置,這些列的值在組合時必須唯一。在MySQL中,復(fù)合主鍵可以使用兩種方式來設(shè)置:使用PRIMARY KEY約束或使用UNIQUE約束。
例如,以下代碼演示了如何使用復(fù)合主鍵設(shè)置表的主鍵:
“`sql
CREATE TABLE course
(
id INT NOT NULL,
name VARCHAR(20) NOT NULL,
score INT NOT NULL,
PRIMARY KEY (id, name)
);
“`
上面的代碼創(chuàng)建了一個名為course的表,其中由id和name兩列組成的復(fù)合主鍵用PRIMARY KEY約束進行設(shè)置。
四、如何選擇主鍵
在設(shè)置主鍵時,應(yīng)當(dāng)注意以下幾點:
1. 主鍵必須唯一,因此它不能是空值。因此,應(yīng)該考慮在設(shè)置主鍵時使用非空列。
2. 合理地選擇數(shù)據(jù)類型。一般情況下,自增整數(shù)類型(如int、bigint)最適合作為主鍵。這些類型的數(shù)據(jù)存儲量小,查詢速度快,而且容易維護。
3. 合理選取主鍵的業(yè)務(wù)含義。主鍵可以被視為表的一種業(yè)務(wù)標(biāo)識符,因此應(yīng)該選擇那些適合作為業(yè)務(wù)標(biāo)識符的列作為主鍵。
5、結(jié)論
主鍵是MySQL表格設(shè)計中的重要組成部分,正確設(shè)置主鍵可以保證表格數(shù)據(jù)的唯一性,并提高數(shù)據(jù)的查詢效率。在選擇主鍵時,應(yīng)該合理選擇數(shù)據(jù)類型和業(yè)務(wù)含義。
本文主要介紹了MySQL中表格主鍵的作用、設(shè)置方式和選擇方法,希望對讀者有所幫助。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220mysql 設(shè)置主鍵還要設(shè)置索引嗎
可以的,修改語句如下
ALTER
TABLE
`數(shù)據(jù)庫名`.`表名`
ADD
INDEX
`自定義索引名`
(`主鍵列名`);
不過mysql主鍵上默認(rèn)就有聚集索引,除非是用于復(fù)合索引,否則沒必要再對主鍵重復(fù)添加非聚集索引。
不需要,主鍵具備索引的功能了。
當(dāng)你創(chuàng)建或設(shè)置主鍵的時候,mysql會自動添加一個與主鍵對應(yīng)的唯一索引,不需要再做額外的添加。
如果查詢的條件中沒有用到主鍵,可以將你的查詢字段設(shè)置為索引。如果你想在主鍵上設(shè)置索引的話,主鍵就有索引的功能。
擴展資料:
注意事項
1、主鍵一定是唯一性的索引,唯一性的所以不一定就是主鍵。
主鍵就是能夠唯一標(biāo)識表中某一行的屬性或者是屬性組,一個表只能有一個主鍵,但可以有多個候選索引。因為主鍵可以唯一標(biāo)識一行記錄,所以可以確保執(zhí)行數(shù)據(jù)更新、刪除的時候不會出現(xiàn)錯誤的。主鍵還經(jīng)常和外鍵構(gòu)成參照完整性約束,防止出現(xiàn)數(shù)據(jù)不一致。數(shù)據(jù)庫管理系統(tǒng)對于主鍵自動生成唯一索引,所以主鍵也是一個特殊的索引。
2、一個表中可以有多個唯一索引,但是主鍵只能有一個。
3、主鍵列不允許為空值,而唯一性索引列允許空值。
4、主鍵也可以由多個字段組成,組成復(fù)合主鍵,同時主鍵也是唯一索引。
5、唯一索引表示索引值唯一,可以由一個或者幾個字段組成,一個表可以由多個唯一索引。
不需要。因為當(dāng)你創(chuàng)建或設(shè)置主鍵的時候,mysql會自動添加一個與主鍵對應(yīng)的唯一索引,不需要再做額外的添加。
如下圖在mysql中創(chuàng)建的一張表,可以看到CREATE TABLE語句中只設(shè)置了主鍵 PRIMARY KEY,并沒有建立索引的語句,但索引信息處顯示了唯一主鍵索引,這是由mysql自己創(chuàng)建的。
擴展資料
數(shù)據(jù)庫主鍵和索引的區(qū)別與聯(lián)系
1、主鍵是一定是唯一性索引,但唯一性索引不一定是主鍵。
數(shù)據(jù)庫管理系統(tǒng)對于主鍵自動生成唯一索引
,所以主鍵是一個特殊的索引
。
2、唯一索引標(biāo)識索引值唯一,一個表可以有多個唯一索引,但主鍵只能有一個。
3、主鍵列不能為空,但唯一索引列可以為空。
4、一張表只能有一個主鍵,但可以有多個索引。
通俗舉例來說:主鍵相當(dāng)于一本書的頁碼,索引相當(dāng)于書的目錄。
你看看你的程序 如果查詢的條件中沒有用到主鍵,可以將你的查詢字段設(shè)置為索引。如果你想在主鍵上設(shè)置索引的話,不需要了,主鍵就有索引的功能
不需要的,主鍵具備索引的功能了
mysql數(shù)據(jù)庫表用什么做主鍵?
1、主鍵定義
表中經(jīng)常有一個列或多列的組合,其值能唯一地標(biāo)識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可強制表的實體完整性。當(dāng)創(chuàng)建或更改表時可通過定義 PRIMARY KEY 約束來創(chuàng)建主鍵。一個表只能有一個 PRIMARY KEY 約束,而且 PRIMARY KEY 約束中的列不能接受空值。由于 PRIMARY KEY 約束確保唯一數(shù)據(jù),所以經(jīng)常用來定義標(biāo)識列。
2、主鍵作用
1)保證實體的完整性;
2)加快數(shù)據(jù)庫的操作速度
3) 在表中添加新記錄時,數(shù)據(jù)庫會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復(fù)。
4) 數(shù)據(jù)庫自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
3、主鍵的必要性
在有些數(shù)據(jù)庫中,雖然主鍵不是必需的,但更好為每個表都設(shè)置一個主鍵,不管是單主鍵還是復(fù)合主鍵。它存在代表著表結(jié)構(gòu)的完整性,表的記錄必須得有唯一區(qū)分的字段,主鍵主要是用于其他表的外鍵關(guān)聯(lián),以及本記錄的修改與刪除。
4、主鍵的選擇
1)編號作主鍵
此方法就是采用實際業(yè)務(wù)中的唯一字段的“編號”作為主鍵設(shè)計,這在小型的項目中是推薦這樣做的,因為這可以使項目比較簡單化,但在使用中卻可能帶來一些麻煩,比如要進行“編號修改”時,可能要涉及到很多相關(guān)聯(lián)的其他表
2)自動編號主鍵
這種方法也是很多人在使用的,就是新建一個ID字段,自動增長,非常方便也滿足主鍵的原則
a、優(yōu)點:數(shù)據(jù)庫自動編號,速度快,而且是增量增長,聚集型主鍵按順序存放,對于檢索非常有利;數(shù)字型的,占用空間小,易排序,在程序中傳遞也方便;如果通過非系統(tǒng)增加記錄(比如手動錄入,或是用其他工具直接在表里插入新記錄,或老系統(tǒng)數(shù)據(jù)導(dǎo)入)時,非常方便,不用擔(dān)心主鍵重復(fù)問題。
b、缺點:其實缺點也就是來自其優(yōu)點,就是因為自動增長,在手動要插入指定ID的記錄時會顯得麻煩,尤其是當(dāng)系統(tǒng)與其他系統(tǒng)集成時,需要數(shù)據(jù)導(dǎo)入時,很難保證原系統(tǒng)的ID不發(fā)生主鍵沖突(前提是老系統(tǒng)也是數(shù)字型的);如果其他系統(tǒng)主鍵不是數(shù)字型那就麻煩更大了,會導(dǎo)致修改主鍵數(shù)據(jù)類型了,這也會導(dǎo)致其他相關(guān)表的修改,后果同樣很嚴(yán)重;就算其他系統(tǒng)也是數(shù)字型的,在導(dǎo)入時,為了區(qū)分新老數(shù)據(jù),可能想在老數(shù)據(jù)主鍵前統(tǒng)一加一個“o”(old)來表示這是老數(shù)據(jù),那么自動增長的數(shù)字型又面臨一個挑戰(zhàn)。
3)Max加一
由于自動編號存在那些問題,所以有些人就采用自己生成,同樣是數(shù)字型的,只是把自動增長去掉了,采用在Insert時,讀取Max值后加一,這種方法可以避免自動編號的問題,但也存在一個效率問題,如果記錄非常大的話,那么Max()也會影響效率的;更嚴(yán)重的是并發(fā)性問題,如果同時有兩人讀到相同的Max后,加一后插入的ID值會重復(fù),這已經(jīng)是有經(jīng)驗教訓(xùn)的了。
4)自制加一
考慮Max加一的效率后,有人采用自制加一,也就是建一個特別的表,字段為:表名,當(dāng)前序列值。這樣在往表中插入值時,先從此表中找到相應(yīng)表的更大值后加一,進行插入,有人可能發(fā)現(xiàn),也可能會存在并發(fā)處理,這個并發(fā)處理,可以采用lock線程的方式來避免,在生成此值的時,先Lock,取到值以后,再unLock出來,這樣不會有兩人同時生成了。這比Max加一的速度要快多了。但同樣存在一個問題:在與其他系統(tǒng)集成時,脫離了系統(tǒng)中的生成方法后,很麻煩保證自制表中的更大值與導(dǎo)入后的保持一致,而且數(shù)字型都存在上面講到的“o”老數(shù)據(jù)的導(dǎo)入問題。因此在“自制加一”中可以把主鍵設(shè)為字符型的。字符型的自制加一中應(yīng)該字符型主鍵可以應(yīng)付很多我們意想不到的情況。
5)GUID主鍵
目前一個比較好的主鍵是采用GUID,推薦主鍵還是字符型的,但值由GUID生成,GUID是可以自動生成,也可以程序生成,而且鍵值不可能重復(fù),可以解決系統(tǒng)集成問題,幾個系統(tǒng)的GUID值導(dǎo)到一起時,也不會發(fā)生重復(fù),就算有“o”老數(shù)據(jù)也可以區(qū)分,而且效率很高,在.NET里可以直接使用System.Guid.NewGuid()進行生成,在SQL里也可以使用NewID()生成。優(yōu)點是:
同IDENTITY 列相比,uniqueidentifier 列可以通過NewID() 函數(shù)提前得知新增加的行ID,為應(yīng)用程序的后續(xù)處理提供了很大方便。
a、優(yōu)點:便于數(shù)據(jù)庫移植,其它數(shù)據(jù)庫中并不一定具有IDENTITY 列,而Guid 列可以作為字符型列轉(zhuǎn)換到其它數(shù)據(jù)庫中,同時將應(yīng)用程序中產(chǎn)生的GUID 值存入數(shù)據(jù)庫,它不會對原有數(shù)據(jù)帶來影響。便于數(shù)據(jù)庫初始化,如果應(yīng)用程序要加載一些初始數(shù)據(jù),IDENTITY 列的處理方式就比較麻煩,而uniqueidentifier 列則無需任何處理,直接用T-SQL 加載即可。便于對某些對象或常量進行永久標(biāo)識,如類的ClassID,對象的實例標(biāo)識,UDDI 中的聯(lián)系人、服務(wù)接口、tModel標(biāo)識定義等。
b:缺點是:
GUID 值較長,不容易記憶和輸入,而且這個值是隨機、無順序的
GUID 的值有16 個字節(jié),與其它那些諸如4 字節(jié)的整數(shù)相比要相對大一些。這意味著如果在數(shù)據(jù)庫中使用uniqueidentifier 鍵,可能會帶來兩方面的消極影響:存儲空間增大;索引時間較慢。
視頻講解的是mysql數(shù)據(jù)庫中存儲引擎的知識,使用命令的方式查看當(dāng)前數(shù)據(jù)庫服務(wù)器用的什么存儲引擎。本視頻的目的在于一方面學(xué)習(xí)熟悉命令,另一方面為后續(xù)的學(xué)習(xí)存儲引擎知識做鋪墊。
可以用自動標(biāo)示做。
每增加1個人的名字,自動標(biāo)示就自動增加數(shù)字1,永遠(yuǎn)都不會重復(fù),就算你把其中一個刪除掉了,它的標(biāo)示數(shù)字也不會在出現(xiàn),做到了永遠(yuǎn)不重復(fù)。
當(dāng)然用id做主鍵了,要是有重名的你的數(shù)據(jù)庫就存不了了,太局限了
關(guān)系型數(shù)據(jù)庫的特點在于多個表之間使用關(guān)系聯(lián)系起來
這樣可以顯著降低數(shù)據(jù)庫的容量,并提高維護效率
主鍵并不是必須的
但是增加主鍵對單表查詢的效率提升很高
所以從原理上來說只要該字段絕對不會重復(fù)
那么使用任何類型的字段,比如你上面所說的人名也是可以的
但是如果考慮到與其它表的相互連接
使用人名的可操作性就不是很好
所以,之一點,建議你另外增加一個自動編號的字段作為id,用來做主鍵
第二點,關(guān)系型數(shù)據(jù)庫的特點就是多表之間有冗余,但是實際上是降低了整個數(shù)據(jù)庫的維護難度,
鑒于你看起來對關(guān)系型數(shù)據(jù)庫原理不清楚
更建議你先把關(guān)系型數(shù)據(jù)庫原理再看看
在MySQL中如何設(shè)置主鍵和外鍵
添加主鍵~
alter
table
table_name
add
constraint
pk_name
primary
key(列名);
添加外鍵~
alter
table
table_name
add
constraion
pk_name
foreign
key(列名)
references
table_name(列名);
基礎(chǔ)語法~其他條件自行添加在mysql中如何嫌此設(shè)巧差置主鍵孝者皮和外鍵
新建一個字段作為你所指定的主鍵
然后添加約束
用mysql的插件
添加主鍵~
ALTER
TABLE
table_name
ADD
CONSTRAINT
pk_name
PRIMARY
KEY(列名);
添加伏槐外鍵~
ALTER
TABLE
table_name
ADD
CONSTRAION
pk_name
FOREIGN
KEY(列名)
REFERENCES
table_name(列名);
基礎(chǔ)語法~其他條晌廳雀件自宴早行添加
關(guān)于mysql數(shù)據(jù)庫設(shè)置主鍵的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技公司主營:網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、小程序制作、成都軟件開發(fā)、網(wǎng)頁設(shè)計、微信開發(fā)、成都小程序開發(fā)、網(wǎng)站制作、網(wǎng)站開發(fā)等業(yè)務(wù),是專業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫冊、網(wǎng)頁、VI設(shè)計,網(wǎng)站、軟件、微信、小程序開發(fā)于一體。
網(wǎng)頁名稱:學(xué)習(xí)MySQL:如何正確設(shè)置表格主鍵?(mysql數(shù)據(jù)庫設(shè)置主鍵)
文章地址:http://www.dlmjj.cn/article/cdiicgh.html


咨詢
建站咨詢
