我只是尝试在MariaDB中执行MySQL文件,但它给了我以下错误:ERROR 1005 (HY000) at line 14: Can't create table roundcube.calendars (errno: 150 "Foreign key constraint is incorrectly formed")
这是SQL查询:https://pastebin.com/4FBA30JM 不幸的是,我无法将其发布在此处,因为它有点混淆了格式。
答案 0 :(得分:2)
这是您的日历表定义:
CREATE TABLE IF NOT EXISTS `calendars` (
`calendar_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
`name` varchar(255) NOT NULL,
`color` varchar(8) NOT NULL,
`showalarms` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY(`calendar_id`),
INDEX `user_name_idx` (`user_id`, `name`),
CONSTRAINT `fk_calendars_user_id` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
我在沙盒中测试了这个,声明很好。它没有错。
但是,我在链接的代码示例中看不到users
表。在使用外键创建表之前,必须满足以下条件:
users
)必须存在。user_id
)必须存在于表中。INT UNSIGNED
(整数长度参数(10)是可选的,在两个表中可能不同。)因此,您必须拥有一个至少类似于数据库中已存在的表:
CREATE TABLE `users` (
`user_id` int(10) UNSIGNED NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
我必须在我的沙箱中创建此表,然后才能使用日历表定义。