由于它们必须是唯一的,我应该在MySQL数据库中给FK取什么名字?

推荐答案

在MySQL中,不需要为外键约束指定符号名.如果没有给出名称,InnoDB会自动创建一个唯一的名称.

无论如何,这是我使用的惯例:

fk_[referencing table name]_[referenced table name]_[referencing field name]

例子:

CREATE TABLE users(
    user_id    int,
    name       varchar(100)
);

CREATE TABLE messages(
    message_id int,
    user_id    int
);

ALTER TABLE messages ADD CONSTRAINT fk_messages_users_user_id 
    FOREIGN KEY (user_id) REFERENCES users(user_id);

我try 在引用和引用表中使用相同的字段名,如上例中的user_id.当这不实用时,我还将引用的字段名附加到外键名.

这种命名约定允许我通过查看表定义来"猜测"符号名,此外,它还保证了名称的唯一性.

Mysql相关问答推荐

如果WHERE语句包含所有列,唯一键顺序是否重要?

从 NextJS/Prisma 添加用户 ID (FK) 到 MySQL 表

一次更新mysql中的多个列

Select 分组产品的数量和每个产品的最便宜的价格

如何创建一个判断行是否存在的mysql查询-如果存在我想插入一条新记录,否则增加一个值

MYSQL REGEXP_REPLACE 在数字之后

如何解决这个特定的 SQL 查询?我的解决方案还返回不想要的值

如何使用 SQL 聚合和求和相似 Select 的值?

如何通过if语句对SQL查询进行排序

基于 2 列的重复行的 SQL 查询

Select 多列但仅按 1 列分组

如何在 Mysql 中创建复合外键

如何使主键从 1000 开始?

MySQL Workbench 无法加载 mysql.proc

在 MYSQL 中按枚举字段排序

使用 PHP 和 MySQL 存储和显示 unicode 字符串 (हिन्दी)

在 MySQL 中找不到 outfile 创建的文件

在 MySQL 中签名或未签名

使用 MySql,我可以对列进行排序但最后有 0 吗?

从 MySQL JSON 数据类型中提取不带引号的值