如果我在phpmyadmin中为表“ photos”创建外键约束,则稍后会看到该约束名为“ photos_ibfk_1”,下一个约束名为“ photos_ibfk_2”,依此类推。由此,我得出[tablename] _ibfk_constraintIndex为MySQL中数据库约束的约定。这个对吗? IBFK代表什么?

评论

ibfk = ib(InnoDB)fk(外键)... innodb外键

#1 楼

innodb外键。这只是简短的命名约定。您可以将其命名为asdfqwerty,并且名称仍然可以使用。

#2 楼

尽管外键名可以是任何东西,但实际上最好遵循将表名放在首位的惯例。

最重要的原因是外键名在数据库中必须唯一(与索引名称相反,索引名称只能在每个表中唯一)。因此,遵循此约定,外键名称仅在每个表中必须唯一。

我个人使用约定[table_name]_fk_[field_name]

为了命名外键,您将必须明确说明表上的约束,而不仅仅是外键。

简单方法(自动命名,将导致[table_name]_ibfk_[index]):

ALTER TABLE `[table_name]`
  ADD FOREIGN KEY (`[field_name]`)
    REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);


显式方法(将导致[table_name]_fk_[field_name]):

ALTER TABLE `[table_name]`
  ADD CONSTRAINT `[table_name]_fk_[field_name]`
    FOREIGN KEY (`[field_name]`)
    REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);


评论


约束名称在整个服务器上不是全局唯一的-只是数据库唯一的。您可以在同一服务器上的两个不同数据库上重复使用相同的约束名称。

–布兰登
19年7月18日在21:46

@布兰登:好收获!我会编辑。 👍

–马可·罗伊(Marco Roy)
19年7月18日在23:02

您好,我是Mysql的新手。我对单词“最重要的原因是外键名称在数据库中必须唯一”感到困惑,因此[table_name] _ibfk_ [index]是外键名称吗?

– Archsx
20 Dec 5'在10:29

@Archsx:是的,这就是约束的名称。外键是约束的一种类型,但也有其他约束,例如唯一键。

–马可·罗伊(Marco Roy)
20 Dec 10'在17:40