前提・実現したいこと
filesテーブルのuser_id列とuser_name列から、それぞれusersテーブルのid列とname列を参照したい。
files(子テーブル) users(親テーブル)
・user_id(外部キー) ・id(参照されるキー)
・user_name(外部キー) ・name(参照されるキー)
発生している問題・エラーメッセージ
ERROR 3780 (HY000): Referencing column 'user_name' and referenced column 'name' in foreign key constraint 'files_ibfk_1' are incompatible.
該当のソースコード
sql
1CREATE TABLE files ( 2 id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, 3 user_id int unsigned, 4 user_name varchar(191) NULL, 5 FOREIGN KEY (user_id, user_name) 6 REFERENCES users(id,name) 7);
試したこと
mysql> SHOW CREATE TABLE users;
で調べてみると、
| users | CREATE TABLE users
(
id
int unsigned NOT NULL AUTO_INCREMENT,
name
varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
email
varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
email_verified_at
timestamp NULL DEFAULT NULL,
password
varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
remember_token
varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
created_at
timestamp NULL DEFAULT NULL,
updated_at
timestamp NULL DEFAULT NULL,
PRIMARY KEY (id
),
UNIQUE KEY users_email_unique
(email
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
でした。
usersテーブルのnameも、filesテーブルのuser_nameもvarchar(191)なのに、なぜ参照できないのでしょうか。
補足情報(FW/ツールのバージョンなど)
Laravel Framework 5.7.29
mysql Ver 8.0.23 for Linux on x86_64 (MySQL Community Server - GPL)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/11 01:47 編集
2021/11/11 03:05
2021/11/22 02:47