可能重複:
is this possible to made two primary key in one table主鍵是否可以包含多個列?
是否有可能確定在MySQL上的多個columne主鍵?
這是如何在create table
聲明中指出的?
可能重複:
is this possible to made two primary key in one table主鍵是否可以包含多個列?
是否有可能確定在MySQL上的多個columne主鍵?
這是如何在create table
聲明中指出的?
是的,你完全可以。
這裏有一個鏈接:
http://sqlzoo.net/howto/source/z.dir/tip241027/mysql
這裏是基本語法:
CREATE TABLE myTable(
myCol1 INTEGER NOT NULL,
myCol2 CHAR(10) NOT NULL,
myCol3 INTEGER NOT NULL,
myCol4 CHAR(1),
PRIMARY KEY (myCol1 , myCol2 , myCol3)
)
是的,它可以
CREATE TABLE table1(col1 INT NOT NULL, col2 INT NOT NULL, PRIMARY KEY(col1,col2));
UPDATE
這是可能的,但我不建議過度使用mysql INNODB
表的複合主鍵。對於INNODB
引擎主鍵也是一個聚集索引,它定義了行數據的物理位置。頻繁更改任何屬於PK部分的列都會導致外部碎片,從而導致性能下降。 2列上的唯一鍵將會更好。
當然,複合PK是一個不錯的選擇,當你實現很多一對多的關係
+1同樣適用於SQL Server - 默認情況下,主鍵是集羣鍵,並且應該是窄和靜態的 - 並非總是使用複合鍵給定的。另外:複合鍵使得加入一個混亂的業務 - 我儘量避免它儘可能多 – 2011-06-01 04:56:22
您可以使用:
CREATE TABLE tableName (
firstName varchar(10) NOT NULL,
surname varchar(20) NOT NULL,
primary key(firstName,surname)
);
我個人使用這種結構,當我用一個查找表來連接多對一 - 許多領域:
CREATE TABLE personPhoneNumbersLookup (
personID int(3) NOT NULL,
phoneNumberID int(4) NOT NULL,
primary key(personID,phoneNumberID)
);
爲了確保我只有一個特定的人連接到一個特定的電話號碼只有一次。顯然,相同的personID
可以用於其他電話號碼,並且多個電話號碼可以連接到同一個人。
非常聰明!和信息。謝謝 – user741684 2011-05-31 20:04:18
正如其他人所說...是的,你可以...但是,在許多系統中,表格將具有「替代」自動遞增鍵,這將是您的「主要」,並在大多數情況下用於您的連接。 。這樣可以防止像MyCol1,MyCol2,MyCol3和FirstName,SurName這樣的其他數據在其他表格中重複使用。
此外,您可以擁有一個「候選」鍵,這是一個UNIQUE索引,用於添加到主要表中的表,例如重複條目預防或「查找」目的。按名稱查詢是一回事。然後,當你有他們的「Surrogate」ID時,這是系統中其他地方使用的關鍵......例如:你會找到一個完全不相關條目的「Bob Smith」多少次......但ID#3892位於123 Anyplace的「Bob Smith」與位於983 Wrong Street的ID#28928「Bob Smith」不同。
@Michael Todd:這個問題的意圖似乎有很大的不同,不是重複的,我意識到接受問題的一部分確實涉及到與這裏提到的相同的問題。 – 2011-05-31 19:58:14
@邁克爾:感覺沮喪? – user741684 2011-05-31 19:59:42
沒有。只是想確保一個乾淨的網站。 – 2011-05-31 20:11:18