“ ibfk”在MySQL中代表什么?


25

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


5
ibfk = IB( nnoD )FK(˚F的外国人ķ EY)... innodb的外键
WebGuy

Answers:


24

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


7

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

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

我个人使用约定[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]`);

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

@布兰登:好收获!我会编辑。👍
马尔科·罗伊
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.