你不能在表內添加表,你要做的是添加一個外鍵引用,它基本上是另一個表的ID(或者其他表中的任何一個),並且使另一個表分開。
CREATE TABLE Node (
Id INT(3),
Position VARCHAR(12),
FoodTax INT(2),
HasTreasureMap TINYINT(1),
CurrentPlayer INT(3),
PRIMARY KEY(Id),
INDEX (CurrentPlayer)
);
CREATE TABLE Player (
Id INT(3),
Name VARCHAR(64),
PRIMARY KEY (Id)
);
請注意,INDEX(CurrentPlayer)
在除非要加入表格,否則第一個表格不是必需的,或者使用CurrentPlayer
字段進行搜索或排序。
如果您使用的是InnoDB數據庫引擎,那麼您可以直接指定Node
表定義內表之間關係的性質,如下所示。
CREATE TABLE Node (
Id INT(3),
Position VARCHAR(12),
FoodTax INT(2),
HasTreasureMap TINYINT(1),
CurrentPlayer INT(3),
PRIMARY KEY(Id),
INDEX (CurrentPlayer),
FOREIGN KEY (CurrentPlayer) REFERENCES Player(Id)
ON UPDATE CASCADE
ON DELETE SET NULL
);
的FOREIGN KEY
添加導致一些影響,它增加了一個檢查,讓你不能在Node
表不已經在Player
表存在CurrentPlayer
設置一個值,任何INSERT/UPDATE
嘗試此會失敗。另外,ON UPDATE
和ON DELETE
這兩個選項會告訴數據庫,如果Player
中的記錄被更新或刪除,則通過Node
表上的觸發器自動執行操作。 ON UPDATE CASCADE
表示如果Player
記錄的Id
更新爲其他內容,則將級聯進入Node
表,並更改該值。 ON DELETE SET NULL
指出如果從Player
表中刪除記錄,則Node
中對應的CurrentPlayer
值應設置爲NULL
。
嗨Orbling,感謝您的回覆。我有400個節點,但我只有4名球員。那麼將Player添加爲外鍵是否有意義?這是一個遊戲地圖,我想檢查當前節點中是否有玩家。我正在考慮將它保存在我的java代碼中,但只是想試試用mysql。 – Chan 2010-11-25 19:07:33
您需要SQL和數據庫設計的基礎課程。一些實際的信息可以在這裏找到:http://www.kawoolutions.com/SQL_Database_Design – Kawu 2010-11-25 19:20:44