php - 在我的表中创建 message_id 时出现 MySQL 错误

标签 php mysql foreign-keys

我有一个表消息。我尝试使用 message_id 外键创建表 contests

CREATE TABLE IF NOT EXISTS `message` (
  `chat_id` bigint COMMENT 'Unique chat identifier',
  `id` bigint UNSIGNED COMMENT 'Unique message identifier',

  ....

  PRIMARY KEY (`chat_id`, `id`),

  ...

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

还有我的 table 比赛

CREATE TABLE IF NOT EXISTS `contests` (
  `id` INT(11) AUTO_INCREMENT COMMENT 'ID записи',
  ...

  `message_id` bigint UNSIGNED COMMENT 'ID сообщения с кнопкой',
  `chat_id` bigint COMMENT 'Так надо',

  ...

  PRIMARY KEY (`id`),

  FOREIGN KEY (`message_id`) REFERENCES `message` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY (`chat_id`) REFERENCES `message` (`chat_id`) ON DELETE CASCADE ON UPDATE CASCADE,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

Error: Create table 'admin_bot/contests' with foreign key constraint failed. There is no index in the referenced table where the referenced columns appear as the first columns.

最佳答案

您需要使用表的主键在表的外键中引用它。您的 SQL 需要如下所示:

CREATE TABLE IF NOT EXISTS `contests` (
  `id` INT(11) AUTO_INCREMENT COMMENT 'ID записи',
  ...

  `message_id` bigint UNSIGNED COMMENT 'ID сообщения с кнопкой',
  `chat_id` bigint COMMENT 'Так надо',

  ...

  PRIMARY KEY (`id`),

   FOREIGN KEY (`chat_id`, `message_id`) REFERENCES `message` (`chat_id`, `id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

关于php - 在我的表中创建 message_id 时出现 MySQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49927649/

相关文章:

php - prestashop - 从模块创建客户组

mysql - 返回大量结果的组合 SQL 查询

mysql - hbm2ddl - 如何避免 Hibernate 创建外键约束?

sql - 类表继承模型的 INSERT 语句

python - pymysql 事务保存一个插入查询但忽略两个更新查询而不引发错误

MySQL php 创建仅包含外键的表(错误 150)

php - (如何)PHP 缓存脚本和自定义 INI 文件?

php - 如何使用 php 从 xpath 中获取结果?

java - toString 实现的最佳标准样式是什么?

mysql - 添加搜索,在 DBGrid 中搜索数据并临时更改 DBGrid 显示的内容 - Delphi