如何在phpmyadmin中创建外键

如何在phpmyadmin中创建外键,php,mysql,database,phpmyadmin,Php,Mysql,Database,Phpmyadmin,我想让doctorid成为我病人表中的外键 所以我创建了所有的表-主要的问题是,当我进入表>结构>关系视图时,只有主键出现,我可以创建外键(并且它已经是我想要保留的特定表的主键-即患者表患者可以更改,但医生Id-我也有一个医生表-未启用) 在关系视图中,我有另一个具有两个复合键(medicineid和patientid)的表,它允许我同时更改这两个键 我是否必须将患者表中医生ID的索引与其他索引关联?这两个索引不能都是主键,因为患者ID是患者表的主键-医生是外键 我希望任何人都能帮忙 好心的问

我想让doctorid成为我病人表中的外键

所以我创建了所有的表-主要的问题是,当我进入表>结构>关系视图时,只有主键出现,我可以创建外键(并且它已经是我想要保留的特定表的主键-即患者表患者可以更改,但医生Id-我也有一个医生表-未启用)

在关系视图中,我有另一个具有两个复合键(medicineid和patientid)的表,它允许我同时更改这两个键

我是否必须将患者表中医生ID的索引与其他索引关联?这两个索引不能都是主键,因为患者ID是患者表的主键-医生是外键

我希望任何人都能帮忙


好心的问候

你可以用老式的方式…用一个类似这样的SQL语句

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

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

必须对键进行索引才能应用外键约束。要执行此操作,请执行以下步骤

  • 打开表结构。(第二个选项卡)
  • 查看最后一列操作,其中有多个操作选项。单击索引,这将使列索引
  • 打开关系视图并添加外键约束

  • 您现在可以将医生ID指定为外来。

    当您创建表格时,您可以给出如下内容

    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 table_name
        ADD CONSTRAINT fk_foreign_key_name
        FOREIGN KEY (foreign_key_name)
        REFERENCES target_table(target_key_name);
    
       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;
    

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

    为了能够创建关系,表存储引擎必须是InnoDB。您可以在操作选项卡中进行编辑。

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

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


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

    一个简单的SQL示例如下:

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

    确保在表名和列名中使用反勾号`生成外键,您需要创建该字段的第一个索引。创建索引后,转到关系视图,您将看到该字段以及主键。嗨,Jon!!感谢您的回答!!我不熟悉使用php,这就是我如何完成rel当我使用visual studio时,我只是想确保我的操作正确-因此,如果我使用SQL语句,这将在表中创建外键?我是否必须对患者表中的“医生id”列进行任何更改?
    ALTER table patient ADD CONSTRAINT fk_to_Doctorid foreign key(Doctorid)REFERENCES doctor(博士)
    -这是正确的吗?是的,SQL语句直接影响底层结构:PHPMyAdmin只是一个为您生成SQL语句的图形界面。只要医生id表已经建立索引,您就不必更改任何内容。如果没有,您需要根据@Alok的回答将其转换为索引应用SQL语句对将成为外键的列进行索引?是的,没错,否则在运行SQL语句时会出现错误谢谢大家!回答得好!我对使用php还不熟悉,所以这是一个很大的帮助-如果我选择使用SQL语句创建外键-`ALTER TABLE Patient ADD CONSTRAINT fk_to_Doctorid foreign key(Doctorid)引用Doctor(Doctorid);`在执行此操作之前,我必须对列进行索引吗?不,在添加外键约束之前,需要对列进行索引。您可以使用MySql语句添加索引。请参阅:我已经索引并运行了该语句-这是在之后出现的-这是否意味着它成功?-MySql返回了一个空结果集(即零行)。(查询耗时0.2090秒)是的!检查关系视图以获得确认!非常好的回答@Alok.Great Yagnik感谢您提供的所有信息和帮助:)更改存储引擎会为事务锁定表。锁定时间取决于服务器。更改存储引擎时请记住这一点。