mysql - phpmyadmin外键 - 在phpMyAdmin中设置外键?




mysql添加外键 (6)

InnoDB允许您使用ALTER TABLE将新的外键约束添加到表中:

ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

另一方面,如果MyISAM在你的上下文中比InnoDB更有优势,那你为什么要创建外键约束呢? 您可以在应用程序的模型级别上处理此问题。 只要确保你想用作外键的列被编入索引!

我正在使用phpMyAdmin建立一个数据库。 我有两个表( foobar ), 它们的主键索引 。 我试图在它们之间创建一个关系表( foo_bar ),使用它们的主键作为外键。

我将这些表创建为MyISAM,但之后将所有这三个表都更改为InnoDB,因为我读到MyISAM不支持外键。 所有id字段都是INT(11)

当我选择foo_bar表时,单击“关系视图”链接,并尝试将FK列设置为database.foo.iddatabase.bar.id ,它表示“没有定义索引!” 每列旁边。

我错过了什么?

澄清/更新

为了简单起见,我想继续使用phpMyAdmin。 我目前使用XAMPP,这很容易让我专注于PHP / CSS / Javascript,并且它带有phpMyAdmin。

另外,虽然我还没有能够设置显式外键,但我确实有一个关系表,并且可以执行如下所示的连接:

SELECT * 
FROM foo 
INNER JOIN foo_bar 
ON foo.id = foo_bar.foo_id 
INNER JOIN bar
ON foo_bar.bar_id = bar.id;

这让我感到不舒服,不会在数据库中明确定义FK。


phpMyAdmin允许你使用他们的“关系”视图来定义外键。 但是,因为MySQL只支持“INNO DB”表中的外部约束,所以首先要确保你使用的表是这种类型的表。

要设置一个外键,以便名为CHILD的表中的PID列引用名为PARENT的表中的ID列,您可以执行以下操作:

  1. 对于这两个表,转到操作选项卡并将其类型更改为“INNO DB”
  2. 确保ID是PARENT表的主键(或至少是索引列)。
  3. 在CHILD表中,为PID列定义一个索引。
  4. 查看CHILD表格的结构选项卡时,单击“添加字段”部分上方的“关系视图”链接。
  5. 您将得到一个表,其中每行对应于CLIENT表中的索引列。 每行中的第一个下拉列表可让您选择索引列引用的TABLE-> COLUMN。 在PID的行中,从下拉列表中选择PARENT-> ID并单击GO。

通过在CHILD表上进行导出,您应该会看到为PID列创建了一个外键约束。


不要忘记两列应该有相同的数据类型。

例如,如果一列的类型为INT,另一列的类型为tinyint,则会出现以下错误:

在[PID列]上创建外键时出错(检查数据类型)


在phpmyadmin中,您只需通过GUI即可分配外键。 点击表格并转到结构选项卡。 在表格下方找到关系视图(如下图所示)。

您可以通过主键旁边的列表框中指定锻造密钥(见下图)。 并保存

自动生成并执行相应的SQL查询。


对于那些新的数据库....并需要改变现有的表。 很多事情似乎很简单,但总是有一些......在A和B之间。

在别的之前,看看this

  1. 确保您有P_ID(父表和父表中的父母ID)。
  2. 当然,它已经填补了父母。 不一定以真实和最终的方式在孩子身上。 因此,例如P_ID#3(可能会在子表中多次指向父表中的原始P_ID)。
  3. 转到SQL选项卡(我使用的是phpMyAdmin,应该与其他的类似)并执行以下命令:

    ALTER TABLE child_table_name
    添加外键(P_ID)
    参考parent_table_name(P_ID)

  4. 点击子表,比结构,最后在关系视图上。 完成您的数据库规划。 在这之前有一个关于级联,限制等的好的答案。当然,它可以通过命令完成......


步骤1:您必须在mysql配置文件(my.cnf或my.ini,取决于您的操作系统)的[mysqld]部分下添加以下行:default-storage-engine = InnoDB,然后重新启动mysqld服务。

第2步:现在,当您创建表格时,您将看到表格的类型是:InnoDB

第3步:创建父表和子表。 现在打开Child表,并选择列U以使用外键:从Action Label中选择索引键,如下所示。

步骤4:现在在打印视图附近的底部从同一子表中打开关系视图,如下所示。

第5步:选择列U,喜欢将外键作为从下拉列表中选择父列。 dbName.TableName.ColumnName

为ON DELETE和ON UPDATE选择适当的值





phpmyadmin