首页 > 解决方案 > MariaDB - 引用 SMALLINT 时的外键问题

问题描述

我对 MariaDB 的外键有疑问……
这些是表:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` binary(20) NOT NULL,
  `role` smallint(5) unsigned NOT NULL DEFAULT 2,
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_email_UN` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
CREATE TABLE `roles` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `roles_name_UN` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

我不明白为什么当我尝试使用此命令更新“用户”时:

ALTER TABLE unito_tweb.users ADD CONSTRAINT users_role_FK FOREIGN KEY (`role`) REFERENCES unito_tweb.roles(id) ON DELETE SET DEFAULT ON UPDATE CASCADE;

我收到此错误:

Can't create table `unito_tweb`.`users` (errno: 150 "Foreign key constraint is incorrectly formed")

标签: sqlforeign-keysmariadb

解决方案


推荐阅读