【问题标题】:PhpMyAdmin foreign key constraint not functioningPhpMyAdmin 外键约束不起作用
【发布时间】:2016-01-31 16:06:18
【问题描述】:

我现在已经看过几个关于在 phpMyAdmin 上设置外键约束的教程,但我似乎永远无法让它工作。

我的目标是将名称存储在名称表中,然后将这些名称作为统计表的外键,其中将存储与每个玩家关联的统计数据。

The stats table (with index)

(名称表的索引方式与统计信息相同,使用索引按钮)

The setup of the foreign key constraint

似乎没有正确建立连接,因为尝试在 PHP 中显示 statname 的值不会产生任何结果。

我意识到相关字段具有我创建的 ID 很重要,并且在我拥有的 phpMyAdmin 版本(4.5.1)中,ID 名称似乎没有显示在外键约束部分, 只有那些 ID 引用的字段。

我对此很陌生,欢迎任何帮助和建议。

【问题讨论】:

  • 我现在已经这样做了,但仍然没有任何成功的迹象。
  • 对不起,我把它弄反了。你的names 表是什么样的?列类型应相同 *varchar(15))。此外,表格必须是InnoDB,而不是MyISAM更新 不过看起来还不错 - 这两个表的内容是什么?
  • names 表只有name 字段,而且确实和varchar(15) 一样长,而且都在InnoDB 中。

标签: php mysql phpmyadmin


【解决方案1】:

在玩家姓名表中,创建一个字段(player_id),该字段存储每个玩家的唯一ID作为主键,该主键将唯一标识该表中的玩家。 接下来,在您的 stats 表中,获取一个字段 (player_id) 并将其设为外键,该外键将引用 player 表中的 (player_id) 字段以引用 stats 表中的玩家统计信息。

【讨论】:

  • 是的,不要忘记遵循参照完整性规则,否则您将不会获得任何成功。
  • 没有问题。如果玩家名称相同,则会引发问题。因此,我对您的建议是,在名称表中,您应该使用球员 ID 字段来唯一标识球员,无论他们的名字是不同还是相同。
  • 根据我的建议,如果将来玩家名称变得相同,那么您的数据库也不会失败,因为无论名称相同还是不同,玩家 id 都是唯一的。
  • 我了解在名称不唯一时使用 ID 的重要性,但由于在我的情况下名称将是唯一的,这是否意味着仍然可以使用名称作为外键?
  • 我认为外键对整数值会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-22
  • 2016-04-13
  • 2019-07-15
  • 1970-01-01
  • 2013-07-27
相关资源
最近更新 更多