[解決済み] 親の行を削除または更新できない: 外部キー制約に失敗 - MYSQL
2022-02-09 03:20:41
質問
データベースからユーザーを削除しようとすると、このエラーが表示されます。削除しようとしているユーザーがappointmentsテーブルの外部キーであるため、このような状態になることはわかっていますが、修正方法やどこで間違ってしまったのかわかりません。このような場合、どのように修正すればよいのでしょうか?
Usersテーブル
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;
アポイントメントテーブル
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`);
解決方法は?
このエラーが発生するのは、削除したいユーザーの関連レコードが
appointments
テーブルを使用します。2つのオプションがあります。
-
最初にappointmentsテーブルから関連するレコードを削除するために、別の
delete
ステートメントを使用します。 -
追加 削除カスケードで オプションに
appointments_user_id_foreign
の外部キーです。このオプションは、関連するレコードを自動的にappointments
テーブルで、そのユーザーのレコードを削除するときに、削除されます。
修正したfk文は次のようになります。
... ADD CONSTRAINT `appointments_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
Nebster が提案した方法は、技術的にはエラーメッセージを除去するものですが、オーファン・レコードを
appointments
テーブル - 削除されたユーザーに関連する予定です。したがって、外部キーを削除することは、私の意見では賢明なオプションではありません。
関連
-
[解決済み】MySQL 派生テーブルはすべて独自のエイリアスを持つ必要があります。
-
[解決済み] MySQLで「一意のテーブル/エイリアスでない」場合
-
[解決済み] mysqldです。dir を data に変更できません。サーバーが起動しません
-
[解決済み] SQLZOO - select from world チュートリアル #13
-
[解決済み] エラー:テーブル '<table-name>' に対するユーザー '<userid>'@'<ip-address>' への select コマンドが拒否されました。
-
[解決済み] このMySQLエラー Incorrect column specifier for column COLUMN NAMEを回避するにはどうしたらよいですか?
-
[解決済み] MySQL エラー 1241。オペランドには1つのカラムが含まれている必要があります。
-
[解決済み] SQL エラー - テーブルの定義が正しくありません; auto カラムは 1 つしか存在できません。
-
[解決済み] MySQLで外部キー制約を一時的に無効にするにはどうすればよいですか?
-
[解決済み】既存テーブルへの外部キー追加
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MySQLエラー#1071 - 指定されたキーが長すぎる; キーの最大長は767バイトです。
-
[解決済み] 1030 ストレージエンジンからエラー28が発生しました
-
[解決済み] ERROR 1148: 使用されたコマンドはこのMySQLバージョンでは許可されていません。
-
[解決済み] テーブル 'performance_schema.session_variables' は存在しません。
-
[解決済み] Error Dropping Database (Can't rmdir '.test', errno: 17)
-
[解決済み] whereステートメントによるmysqlの一括更新
-
[解決済み] MYSQLのTIMESTAMP比較
-
[解決済み] ルートユーザーでログインしているのに、phpMyAdminがデータベースを作成する権限がないと言う
-
[解決済み] 1行目の列 'id' に不正な整数値 '' があります。
-
[解決済み] エラーコード1111。グループ関数の無効な使用