mysql - 约束名称被忽略

标签 mysql constraints

我正在努力学习外键约束的概念,并阅读了 manual about使用这些类型的约束。我非常了解这些限制,并且它们按预期工作。然而,手册上说创建约束的语法是 FOREIGN KEY [index_name] (index_col_name, ...) 但是当我运行以下查询时,两个外键约束都有一个完全不同的名称;

CREATE TABLE blog_user (
    `blog` INTEGER NOT NULL,
    `user`  INTEGER NOT NULL,

    UNIQUE `blog_user` (`blog`, `user`),

    FOREIGN KEY `blog_reference` (`blog`)
        REFERENCES `blog` (`id`)
            ON UPDATE CASCADE
            ON DELETE RESTRICT,

    FOREIGN KEY `user_reference` (`user`)
        REFERENCES `user` (`id`)
            ON UPDATE CASCADE
            ON DELETE CASCADE
) ENGINE = InnoDB;

约束名称导致 blog_ibfk_1 而不是 blog_referenceuser_ibfk_1 而不是 user_reference。为什么他们有自己的名字,而不是我告诉它应该的名字?

最佳答案

比起使用 CONSTRAINT 关键字来指定 FK 约束,例如

 CONSTRAINT `blog_ibfk_1`  FOREIGN KEY (`blog`)
        REFERENCES `blog` (`id`)
            ON UPDATE CASCADE
            ON DELETE RESTRICT

关于mysql - 约束名称被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41183554/

相关文章:

sql - 基于 FK 关系的约束表

mysql - 备份 XAMPP 目录并尝试复制 mysql 目录,但引擎错误中不存在 phpmyadmin.pma__tracking'

php - mysql插入处理很多值

postgresql - PostgreSQL 中的跨表约束

postgresql - 如何删除 Postgres 中列的唯一约束?

Swift Autolayout 警告和其他我不明白的警告

mysql - Mysql 的 Kannel 配置显示错误

mysql - 如何从 ORACLE 中的函数中将 1,2,3.... 返回到单独的行中的 N?

MySQL 按某些值排序,即使表中不存在

Java 玩吧! 2 - 密码限制