在MySQL中的字符串约束中创建外键

问题描述:

我在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

我想你想的语法是:

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

小错误是在参考表:表应该是一个表名:

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