2010-08-28 63 views
0

我有一個名爲「Users」的表,它包含一些字段,如Id,ParentId,Name。
我想要改變這個表來添加新的自連接關係,以便ParentId鏈接到Id,但ParentId是可以爲空的。 我想在mysql中編寫這個alter sql statment而不刪除表。如何修改表以添加自連接關係?

回答

1

你的意思是你想添加一個外鍵約束?如果是這樣,請參閱FOREIGN KEY Constraints文檔。下面是一個例子,首先創建一個簡單的表:

CREATE TABLE `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `parent_id` int(10) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

添加指數爲parent_id列:

ALTER TABLE users 
ADD INDEX `parent_id` (`parent_id`); 

添加外鍵約束:

ALTER TABLE users 
ADD CONSTRAINT `fk_parent_id` 
FOREIGN KEY `parent_id` (`parent_id`) 
REFERENCES `users` (`id`); 

顯示新表結構:

SHOW CREATE TABLE users; 

CREATE TABLE `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `parent_id` int(10) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `parent_id` (`parent_id`), 
    CONSTRAINT `fk_parent_id` 
    FOREIGN KEY (`parent_id`) 
    REFERENCES `users` (`id`) 
) ENGINE=InnoDB; 
2
alter table Users add constraint parent foreign key (ParentId) references 
    Users (Id); 
0

請注意,如果您使用的是包含數據的表,則如果存在孤立關係,則外鍵關係創建將失敗。在創建外鍵之前查找並修復孤兒!

SELECT * FROM users WHERE parent_id NOT IN(SELECT ID FROM users);