これまでPostgresSQLを使ってきたのですが、MySQLに切り替えたところ、今回の事象が発生しました。
ハマって調べる中でピッタリの答えが記載されているものが見つからなかったため、備忘録がてら記載します。
前提
companiesテーブルとemployeesテーブルを作成。
SQL文
CREATE TABLE companies(
id serial NOT NULL,
name text NOT NULL,
deleted boolean NOT NULL default false
);
CREATE TABLE employees(
id serial NOT NULL,
name text NOT NULL,
email text NOT NULL,
password text NOT NULL,
is_administrator boolean NOT NULL default false,
deleted boolean NOT NULL default false,
companies_id int NOT NULL
);
現象
employeesにcompany情報を持たせるために、companies_idというカラムを追加。
companies_id カラムに、companiesテーブルのidカラムとの外部キー制約をつけようとしたところ、
以下のようなエラーが出てハマりました。
ERROR 3780 (HY000): Referencing column 'companies_id' and referenced column 'id' in foreign key constraint 'user_employees_ibfk_1' are incompatible.
解決法
employeesテーブルのcompanies_idカラムの「型」をBIGINT UNSIGNED
にする
(UNSIGNEDは「符号なし」という意味)
詳細説明
companiesテーブルのidカラムの型をserial
で指定していたのが原因でした。
型の設定について不透明だったのですが、
serial
で指定すると、
- BIGINT
- UNSIGNED
- AUTO_INCREMENT
- (長さ20?)
の3つ(4つ)が自動指定されるようです。
なので、employeeテーブルのcompanies_idカラムの方を合わせてあげれば、無事に外部キー制約をつけることができます!
まとめ
最後までご覧いただきありがとうございます。
もし訂正・加筆すべき箇所がありましたらコメントにてご教示いただけますと幸いです。