如何在phpmyadmin中创建外键

时间:2016-06-03 13:22:28

标签: php mysql database phpmyadmin

我想让doctorid在我的病人桌上成为一把外键。

所以我创建了所有表格 - 主要问题是当我去桌子时&gt; <结构>关系视图只有主键出现,我可以创建一个外键(它已经是我想保留的某个表的主键 - 即患者表患者可以更改,但医生Id-我有一个医生表也 - 没有启用)。

我在关系视图中有另外一个带有两个复合键(medicineid和patientid)的表,它可以让我改变它们

我是否必须将患者表中医生ID的索引转换为其他内容?两者都不能成为主键,因为患者ID是患者表的主要依据 - 医生是外国人。

table

我希望任何人都可以提供帮助

亲切的问候

5 个答案:

答案 0 :(得分:16)

你可以用老式的方式来做...用一个看起来像这样的SQL语句

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

这假设密钥已存在于相关表中

答案 1 :(得分:12)

必须将密钥编入索引以应用外键约束。为此,请按照步骤进行操作。

  1. 打开表格结构。 (第二个标签)
  2. 请参阅最后一栏操作,其中包含多个操作选项。点击索引,这将使列编入索引。
  3. 打开关系视图并添加外键约束。
  4. 您现在可以将 DOCTOR_ID 指定为外国人。

答案 2 :(得分:2)

当您创建表格时,您可以给出如下所示。

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;

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

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;

希望这有助于学习FOREIGN键的工作原理

答案 3 :(得分:2)

要创建关系,表 Storage Engine 必须为 InnoDB 。您可以在操作标签中进行编辑。 Storage Engine Configuration

然后,您需要确保主表中的 id 列已建立索引。它应该显示在结构选项卡的索引部分。

Index list

最后,您可以在结构标签中看到选项关系视图。进行编辑时,您将能够在外部表中选择父列来创建关系。

enter image description here

请参阅附件。我希望这对任何人都有用。

答案 4 :(得分:0)

一个简单的SQL示例如下:

ALTER TABLE `<table_name>` ADD `<column_name>` INT(11) NULL DEFAULT NULL ;

确保在表名和列名中使用反引号``