Arch Asked:2020-11-30 01:17:19 +0800 CST2020-11-30 01:17:19 +0800 CST 2020-11-30 01:17:19 +0800 CST 使用辅助键名 FK 772 所有 MySQL 表中的辅助键名称具有相同的格式,如下所示: FK_7t1xj4qgs0fmhdqggh2fkocqo 是的,创建密钥名称时没有严格的要求,但我仍然想了解如何创建具有相同格式的辅助密钥名称。 使用数字和字母 FK_ 之后的字符数 - 25 база-данных 2 个回答 Voted Best Answer Егор Банин 2020-12-03T00:25:12+08:002020-12-03T00:25:12+08:00 让我们从默认情况下 MySQL 中的外键名称不同的事实开始(对于 InnoDB имя-таблицы_ibfk_номер-ключа)。所以你的名字不是mysql生成的,而是别人生成的。您需要找出是谁创建了这些密钥。例如,这样的密钥可以生成迁移工具,某种 ORM。 如果无法理解这些密钥的来源,那么您可以简单地制作类似的密钥。分析这些名称。在您的示例中,后缀似乎是一串[0-9a-z]看起来像 base36 的字母字符。应该成为前缀的值可以从各种地方获取。例如,你可以md5从表名和键号中取(我在php中,但我认为一切都清楚了): <?php $tableName = 'foobar'; $keyNum = 0; $fkName = 'FK_' . base_convert(md5($tableName . $keyNum), 16, 36); echo $fkName; iluxa1810 2020-12-02T22:32:43+08:002020-12-02T22:32:43+08:00 或者,使用uuid(),将破折号替换为空破折号,并从任一侧取 25 个字符。 因此,事实上,有可能使用了某种散列函数,它在输入时被赋予一个长的生成名称,并返回这样一个简写。
让我们从默认情况下 MySQL 中的外键名称不同的事实开始(对于 InnoDB
имя-таблицы_ibfk_номер-ключа
)。所以你的名字不是mysql生成的,而是别人生成的。您需要找出是谁创建了这些密钥。例如,这样的密钥可以生成迁移工具,某种 ORM。如果无法理解这些密钥的来源,那么您可以简单地制作类似的密钥。分析这些名称。在您的示例中,后缀似乎是一串
[0-9a-z]
看起来像 base36 的字母字符。应该成为前缀的值可以从各种地方获取。例如,你可以md5
从表名和键号中取(我在php中,但我认为一切都清楚了):或者,使用
uuid()
,将破折号替换为空破折号,并从任一侧取 25 个字符。因此,事实上,有可能使用了某种散列函数,它在输入时被赋予一个长的生成名称,并返回这样一个简写。