0

我想用外键创建表。

这是该表的方案:

CREATE TABLE `SupplierOrderGoods` (
    `shopOrder_id` INT(11) NOT NULL,
    `supplierGood_id` INT(11) NOT NULL,
    `count` INT(11) NOT NULL,
    PRIMARY KEY (`shopOrder_id`, `supplierGood_id`),
    CONSTRAINT `FK_SupplierOrderGoods_ShopOrders` FOREIGN KEY (`shopOrder_id`) REFERENCES `shoporders` (`id`),
    CONSTRAINT `FK_SupplierOrderGoods_SupplierGoods` FOREIGN KEY (`supplierGood_id`) REFERENCES `suppliergoods` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

它有两个链接: to table SupplierGoodsFK_SupplierOrderGoods_SupplierGoods和 to table ShopOrdersFK_SupplierOrderGoods_ShopOrders。当我在 HeidiSQL 或 phpMyAdmin 中执行此代码时,FK_SupplierOrderGoods_SupplierGoods正在创建奇数索引。

我没有在我的方案中指定它,但它正在创建中。当我在 HeidiSQL 中看到这一点时,我意识到了这一点:

图片

此外,还有可能在 heidi 中看到表的创建代码:

CREATE TABLE `SupplierOrderGoods` (
    `shopOrder_id` INT(11) NOT NULL,
    `supplierGood_id` INT(11) NOT NULL,
    `count` INT(11) NOT NULL,
    PRIMARY KEY (`shopOrder_id`, `supplierGood_id`),
    ------> INDEX `FK_SupplierOrderGoods_SupplierGoods` (`supplierGood_id`),
    CONSTRAINT `FK_SupplierOrderGoods_ShopOrders` FOREIGN KEY (`shopOrder_id`) REFERENCES `shoporders` (`id`),
    CONSTRAINT `FK_SupplierOrderGoods_SupplierGoods` FOREIGN KEY (`supplierGood_id`) REFERENCES `suppliergoods` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

我没有指定INDEX,但它在这里。我很害怕……为什么?:'(

为什么会出现这个索引?我认为我的 heidi 坏了,所以在 phpmyadmin 中尝试过,但得到了相同的结果。

我想如果它可以是正确的......但为什么只有 1 个字段只有 1 个索引?如果正确,为什么不是两个索引?

更新

哇!我刚刚意识到,所有具有外键的表都有索引!我用谷歌搜索并找到了这个。所以这很正常,该索引是用 fk 创建的,对吧?

那么,为什么只创建了 1 个索引,而不是 2 个?

4

0 回答 0