我在尝试从数据库中删除用户时遇到此错误,我知道这样做是因为我尝试删除的用户是约会表中的外键,但我不知道如何更正或哪里出错了 不确定它是否会改变,只是因为我使用laravel创建表
用户表
CREATE TABLE `users` (
`id` int(10) UNSIGNED NOT NULL,
`firstname` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`surname` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`address` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`postcode` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`dateofbirth` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`role` tinyint(4) NOT NULL,
`remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
约会表
CREATE TABLE `appointments` (
`id` int(10) UNSIGNED NOT NULL,
`time` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`date` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`doctor_id` int(10) UNSIGNED NOT NULL,
`user_id` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `appointments`
ADD PRIMARY KEY (`id`),
ADD KEY `appointments_doctor_id_foreign` (`doctor_id`),
ADD KEY `appointments_user_id_foreign` (`user_id`);
ALTER TABLE `appointments`
ADD CONSTRAINT `appointments_doctor_id_foreign` FOREIGN KEY (`doctor_id`) REFERENCES `doctors` (`id`),
ADD CONSTRAINT `appointments_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);
Run Code Online (Sandbox Code Playgroud)
Sha*_*dow 16
您收到此错误,因为您要删除的用户在appointments表中具有关联的记录.你有2个选择:
首先使用单独的delete语句从约会表中删除关联的记录.
将删除级联选项添加到appointments_user_id_foreign外键.删除appointments用户记录时,此选项将自动从表中删除任何相关记录,以便删除用户.
修改后的fk语句如下所示:
... ADD CONSTRAINT `appointments_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)
@Nebster提出的解决方案在技术上删除了错误消息,但也允许在appointments表中包含孤立记录- 与已删除用户相关的约会.因此,在我看来,删除外键不是一个明智的选择.
小智 6
SET FOREIGN_KEY_CHECKS=0; –禁用它们
SET FOREIGN_KEY_CHECKS=1; –重新启用它们
| 归档时间: |
|
| 查看次数: |
43488 次 |
| 最近记录: |