我尝试创建关系时出错:外键约束格式不正确-MariaDB

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我尝试创建关系时出错:外键约束格式不正确-MariaDB相关的知识,希望对你有一定的参考价值。

[我想在表中创建关系,但是在尝试创建关系时出现此错误:“外键约束格式不正确”。

表格:repository_files:

CREATE TABLE IF NOT EXISTS `repository_files` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `id_user` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `url` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `repository_files_id_user_foreign` (`id_user`),
  CONSTRAINT `repository_files_id_user_foreign` FOREIGN KEY (`id_user`) REFERENCES `repository_m_users` (`CODUSU`)
)

repository_file_var_values:

CREATE TABLE IF NOT EXISTS `repository_file_var_values` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `file_id` int(11) NOT NULL,
  `var` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `value` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

错误是当我尝试以下操作时:

alter table `repo_file_var_values` 
add constraint `repo_file_var_values_file_id_foreign` 
foreign key (`file_id`) 
references `repo_files` (`id`)

可能是什么问题?

答案

您有几个问题:

  1. FK到第一个表中的repository_m_users。我看不到代码,但那里可能有问题。

  2. 您的表名错误。更改

    变更表repo_file_var_values添加约束repo_file_var_values_file_id_foreign外键(file_id)引用repo_filesid

to

alter table `repository_file_var_values` 
add constraint `repo_file_var_values_file_id_foreign` 
foreign key (`file_id`) 
references `repository_file_var_values` (`id`)

最后,更改file_id类型以匹配PK:

`file_id` int(11) NOT NULL,

to

`file_id` bigint(20) unsigned NOT NULL,

以上是关于我尝试创建关系时出错:外键约束格式不正确-MariaDB的主要内容,如果未能解决你的问题,请参考以下文章

150“外键约束格式不正确”

errno: 150 "外键约束格式不正确 - mysql

Laravel - 外键约束的格式不正确

MySQL + Rails:errno:150“外键约束格式不正确”

Laravel 迁移:“外键约束格式不正确”(errno 150)

#1005(错误编号:150“外键约束格式不正确”))