2015-04-04 41 views
0

我在MySQL數據庫中有兩個設計不佳的表。這些表格包含很長的字符串。在MySQL中的字符串約束中創建外鍵

table1領域unqiue_string_1是unqiue:

table1 
unique_string_1 | long_string_1 | long_string | .. 

而在table2領域unqiue_string_1不是唯一的。

table2 
unique_string_1 | .. | more strings.. 
------------------------------------------ 
sample_string_1 | .. | more strings.. 
sample_string_1 | .. | more strings.. 
sample_string_1 | .. | more strings.. 
sample_string_3 | .. | more strings.. 
sample_string_3 | .. | more strings.. 
sample_string_3 | .. | more strings.. 
sample_string_4 | .. | more strings.. 
sample_string_4 | .. | more strings.. 

現在我的phpMyAdmin連接超時,當我嘗試檢索大型數據集。我希望通過編制索引和創建外鍵關係來提高查詢速度。

首先,我這樣做:

CREATE UNIQUE INDEX my_id ON table1(unqiue_string_1) 

現在我想要一個SQL語句創建外鍵。我曾經嘗試這樣做:

ALTER TABLE table2 
ADD FOREIGN KEY (`my_id`) 
REFERENCES table(`my_id`); 

我覺得我缺少某種約束,使sample_string_1table2等於指數table1的外鍵。我錯過了什麼?

+0

有多長字符串? – 2015-04-04 17:30:34

+0

他們大約有50個字符。有幾千個獨特的字符串,但是,使'table2'長於100.000行。感謝您的快速回復! – user1965074 2015-04-04 17:33:36

回答

0

我想你想的語法是:

ALTER TABLE table2 
    ADD FOREIGN KEY (`unique_string_1`) REFERENCES table1(`unique_string_1`); 

的引用是列名,而不是指數。

+0

好的。在這種情況下,我甚至不需要CREATE UNIQUE INDEX my_id ON table1(unqiue_string_1)'語句呢? – user1965074 2015-04-04 17:50:15

+0

如果是唯一的,你應該聲明它是唯一的。 MySQL需要在該領域有一個索引,並且唯一的索引是一個好的索引。 – 2015-04-05 21:03:54

0

小錯誤是在參考表:表應該是一個表名:

ALTER TABLE table2 
ADD FOREIGN KEY (`unique_string_1`) REFERENCES table1(`unique_string_1`);