我有两个表:users
和cities
。
users cities
------ ------
id(PK) id(PK)
name name
idCity(FK)
我想正确创建该外键(idCity
)。我正在使用phpmyadmin
所以我看到我必须这样做:
在我要创建外键的表上创建索引,在本例中为users
,因此我创建了一个名为idCity
的索引,表示列{{1 }}
我转到了idCity
部分,并将该索引与表structure
的{{1}}相关联。
但是我在第一步有些疑惑:我应该选择五个指数中的哪个?
在阅读MySQL documentation之后,我没有非常澄清我的疑虑,我搜索了SO并发现了这个问题:Differences between INDEX, PRIMARY, UNIQUE, FULLTEXT in MySQL?这让我更多地澄清了我的想法,但我仍然有一些对我必须选择的内容产生怀疑。
我对每种索引类型的看法
主要:当然我不必使用它,因为我想要实现的不是主键,而是外键。
索引:我无法清楚地知道这个索引是什么,但我在SO的问题上可以理解的是: index可以包含索引的所有列中具有相同值的行。
由于我的索引仅代表列id
,并且可能有很多用户居住在同一个城市,我认为这可能是最佳选择。
唯一: UNIQUE是指索引中所有行必须唯一的索引。这是我怀疑这一行的主要原因。 cities
选项。我的索引只代表一列,我希望该列中的值可以重复,所以如果我必须使用它,我就不安全。
FULLTEXT 和 SPATIAL :我已经放弃了这些选项,因为我在idCity
上看到了这一点我必须创建我的表格为{{1}其他类型的表支持type和这些类型的索引。
我的结论
我怀疑INDEX
和phpmyadmin
类型的索引。这是因为我不知道当有人引用时: UNIQUE指的是索引的所有行必须是唯一的索引,例如,当他谈论索引的所有行时,如果它表示表中的所有列不必相同,这就是我想要获得的(它可以是多个用户居住在一个城市但不是两个用户重复)。
如果它引用所有行不必相同,我认为最好的方法必须是InnoDB
,因为我不希望两行是相同的,但在它只引用的情况下索引本身(我的UNIQUE
列)然后我必须选择INDEX
类型的索引,因为我希望不止一个用户可以住在城市中。
我的问题
我是否在UNIQUE
上正确创建了外键?我的意思是,我是否正确地遵循每一步?
我的哪个结论是正确的?或者都没有?
编辑:我提供的问题可能是我第一个问题的重复答案,但不是第二个问题。请在将其标记为重复之前阅读完整的问题。谢谢!
提前致谢!