MySQL數(shù)據(jù)庫中,主鍵(Primary Key)和唯一索引(Unique Index)都可以用來在數(shù)據(jù)表中唯一標識某一行數(shù)據(jù)記錄。但是它們之間還是有一些區(qū)別的。
主鍵是一種特殊的唯一索引,它在數(shù)據(jù)表中只能存在一個,并且主鍵列不能為空值。我們可以把主鍵看作是一個物理地址,代表了數(shù)據(jù)表中的一行記錄。主鍵可以是單字段,也可以是多字段組合,但是對于同一個數(shù)據(jù)表而言,主鍵值不能重復(fù)。
-- 創(chuàng)建單字段主鍵 CREATE TABLE t_user ( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, age INT ); -- 創(chuàng)建多字段主鍵 CREATE TABLE t_score ( stu_id INT, subject VARCHAR(20), score INT, PRIMARY KEY (stu_id, subject) );
唯一索引也可以用來標識某一行數(shù)據(jù)記錄,但是可以存在多個唯一索引,并且唯一索引列可以為空??梢园盐ㄒ凰饕醋魇且粋€虛擬地址,代表了數(shù)據(jù)表中的一個或多個數(shù)據(jù)記錄。唯一索引只能是單字段,不能是多字段組合。
-- 創(chuàng)建單字段唯一索引 CREATE TABLE t_user ( id INT, name VARCHAR(20) NOT NULL, age INT, UNIQUE INDEX idx_name (name) );
主鍵和唯一索引的應(yīng)用場景也有所不同。如果我們要對一張數(shù)據(jù)表中的數(shù)據(jù)進行增、改、查、刪操作,那么主鍵是非常重要的。因為它可以幫助我們快速實現(xiàn)數(shù)據(jù)行的定位,提高操作效率。而唯一索引的應(yīng)用場景則和業(yè)務(wù)需求有關(guān)。例如,我們在開發(fā)網(wǎng)站時,可能會使用用戶手機號作為用戶賬號,這時就可以在手機號列上添加一個唯一索引,以保證每個用戶賬號都是唯一的。
綜上所述,主鍵和唯一索引都可以用來唯一標識某一行數(shù)據(jù)記錄,但是主鍵只能存在一個且不能為空值,可以是單字段或多字段組合;唯一索引可以存在多個而且可以為空值,只能是單字段。