sql - 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")
解决方案
推荐阅读
- sql - 在 SQL 中的组级别查找第一次出现的日期
- c# - 使用 PinchGestureRecognizer 进行缩放时图像闪烁
- javascript - 为什么当浏览器选项卡不在焦点时我的脚本会中断
- wordpress - 从 SEARCH WP REST API 中排除帖子
- wav - 导出到 32 位而不是 16 位 Web 音频 API
- performance-testing - DRAM 访问的性能计数器
- c++ - 采用这个平凡的类来处理可选值可能会出什么问题?
- prolog - 任何人都可以帮助我理解这个序言程序吗?
- mapbox - 导入标记数据集与动态添加标记到地图
- python - 在python tkinter中配置标签数组时,如何避免TypeError:只能将str(不是“int”)连接到str?