在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_1
在table2
等于指数table1
的外键。我错过了什么?
我想你想的语法是:
ALTER TABLE table2
ADD FOREIGN KEY (`unique_string_1`) REFERENCES table1(`unique_string_1`);
的引用是列名,而不是指数。
好的。在这种情况下,我甚至不需要CREATE UNIQUE INDEX my_id ON table1(unqiue_string_1)'语句呢? – user1965074 2015-04-04 17:50:15
如果是唯一的,你应该声明它是唯一的。 MySQL需要在该领域有一个索引,并且唯一的索引是一个好的索引。 – 2015-04-05 21:03:54
小错误是在参考表:表应该是一个表名:
ALTER TABLE table2
ADD FOREIGN KEY (`unique_string_1`) REFERENCES table1(`unique_string_1`);
有多长字符串? – 2015-04-04 17:30:34
他们大约有50个字符。有几千个独特的字符串,但是,使'table2'长于100.000行。感谢您的快速回复! – user1965074 2015-04-04 17:33:36