【问题标题】:How to create a foreign key in phpmyadmin如何在 phpmyadmin 中创建外键
【发布时间】:2016-10-03 14:11:36
【问题描述】:

我想让医生在我的病人表中成为外键。

所以我创建了所有表 - 主要问题是当我转到表 > 结构 > 关系视图时,只有主键出现,我可以创建外键(它已经是我想保留的某个表 - 即 Patient 表患者已启用更改,但医生 ID - 我也有医生表 - 未启用)。

我在关系视图中有另一个包含两个复合键(medicineid 和 patientid)的表,它使我能够同时更改两者

我是否必须将患者表中的医生 ID 索引改成其他内容?两者都不能是主键,因为患者 ID 是患者表的主键 - 医生是外来的。

希望大家帮忙

亲切的问候

【问题讨论】:

  • 要生成外键,您需要创建该字段的第一个索引。创建索引后。然后转到关系视图,您将看到该字段以及主键。

标签: php mysql database phpmyadmin


【解决方案1】:

你可以用老式的方式来做这件事......使用看起来像这样的 SQL 语句

ALTER TABLE table_name
    ADD CONSTRAINT fk_foreign_key_name
    FOREIGN KEY (foreign_key_name)
    REFERENCES target_table(target_key_name);

这假设相关表中已经存在键

【讨论】:

  • 嗨乔恩!谢谢您的回答!!我是使用 php 的新手,这就是我在使用 Visual Studio 时使用 SQL 完成关系的方式,但只是想确保我做对了 - 所以如果我使用 SQL 语句,这将在表中创建外键?我需要对患者表中的医生 ID 列进行任何更改吗?
  • ALTER TABLE Patient ADD CONSTRAINT fk_to_Doctorid FOREIGN KEY (Doctorid) REFERENCES Doctor(DoctorId); - 这是正确的吗?
  • 是的,SQL 语句直接影响底层结构:PHPMyAdmin 只是一个为您生成 SQL 语句的图形界面。只要它已经编入索引,您就不必更改医生 ID 表中的任何内容。如果不是,您需要根据@Alok 的回答将其转换为索引
  • 所以在应用 SQL 语句索引将成为外键的列之前?
  • 是的,完全正确,否则运行 SQL 语句时会出错
【解决方案2】:

必须为键建立索引才能应用外键约束。为此,请按照以下步骤操作。

  1. 打开表结构。 (第二个标签)
  2. 查看最后一列操作,其中有多个操作选项。点击Index,这将使列被索引。
  3. 打开关系视图并添加外键约束。

您现在可以将 DOCTOR_ID 指定为外国人。

【讨论】:

  • 谢谢你!很好的答案我是使用 php 的新手,所以这是一个很大的帮助 - 如果我选择使用 sql 语句创建外键 - `ALTER TABLE Patient ADD CONSTRAINT fk_to_Doctorid FOREIGN KEY (Doctorid) REFERENCES Doctor(DoctorId); ` 在执行此操作之前,我是否必须为该列编制索引?
  • 否,该列需要在添加外键约束之前建立索引。您可以使用 MySql 语句添加索引。请参考:dev.mysql.com/doc/refman/5.7/en/create-index.html
  • 我已经索引并运行了该语句 - 这是在此之后出现的 - 这是否意味着它成功了? - MySQL 返回一个空的结果集(即零行)。 (查询耗时 0.2090 秒)
  • 是的!检查关系视图以进行确认!
  • 很好的答案@Alok。
【解决方案3】:

为了能够创建关系,表 Storage Engine 必须是 InnoDB。您可以在 Operations 选项卡中进行编辑。

然后,您需要确保主表中的 id 列已被索引。它应该出现在 Structure 选项卡的 Index 部分。

最后,您可以在 Structure 选项卡中看到选项 Relations View。编辑时,您将能够选择外表中的父列来创建关系。

见附件。我希望这对任何人都有用。

【讨论】:

  • 更改存储引擎会锁定事务表。锁定时间取决于服务器。更改存储引擎时请记住这一点。
【解决方案4】:

当您创建表格时,您可以提供如下内容。

CREATE TABLE categories(
cat_id int not null auto_increment primary key,
cat_name varchar(255) not null,
cat_description text
) ENGINE=InnoDB;


CREATE TABLE products(
   prd_id int not null auto_increment primary key,
   prd_name varchar(355) not null,
   prd_price decimal,
   cat_id int not null,
   FOREIGN KEY fk_cat(cat_id)
   REFERENCES categories(cat_id)
   ON UPDATE CASCADE
   ON DELETE RESTRICT
)ENGINE=InnoDB;

当表创建后像这样

   ALTER table_name
    ADD CONSTRAINT constraint_name
    FOREIGN KEY foreign_key_name(columns)
    REFERENCES parent_table(columns)
    ON DELETE action
    ON UPDATE action;

以下示例。

CREATE TABLE vendors(
    vdr_id int not null auto_increment primary key,
    vdr_name varchar(255)
)ENGINE=InnoDB;

ALTER TABLE products 
ADD COLUMN vdr_id int not null AFTER cat_id;

要将外键添加到产品表中,请使用以下语句:

ALTER TABLE products
ADD FOREIGN KEY fk_vendor(vdr_id)
REFERENCES vendors(vdr_id)
ON DELETE NO ACTION
ON UPDATE CASCADE;

放下钥匙

ALTER TABLE table_name 
DROP FOREIGN KEY constraint_name;

希望这有助于学习外键工作

【讨论】:

  • 伟大的 Yagnik 感谢您提供所有这些信息和帮助 :)
猜你喜欢
  • 2013-09-07
  • 2015-01-18
  • 2023-03-08
  • 2018-08-14
  • 2012-08-16
  • 2017-03-11
  • 2020-03-03
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多