私は2つのテーブル、「PO」と「外部キーを定義することによって、私は2つのテーブルを接続しようとしているのMySQL:エラーメッセージは、テーブルを作成できません(エラー番号:150)
CREATE TABLE `po` (
`PO_ID` bigint(20) NOT NULL,
`SERVICE_TYPE` bit(1) DEFAULT NULL,
`ENTRY_DATE` date NOT NULL,
`RECEIPT_DATE` date DEFAULT NULL,
`TURNOVER` date DEFAULT NULL,
`MOBILIZATION` date DEFAULT NULL,
`SITE_NAME` varchar(255) NOT NULL,
`SITE_CODE` varchar(45) DEFAULT NULL,
`SITE_TIN` varchar(45) DEFAULT NULL,
`SITE_ADDRESS` varchar(255) NOT NULL,
`COST` decimal(11,2) NOT NULL,
`XML` text,
PRIMARY KEY (`PO_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
CREATE TABLE `receive` (
`RECEIPT_ID` varchar(100) NOT NULL,
`RECEIPT_DATE` date NOT NULL,
`PO_NUMBER` bigint(20) NOT NULL,
`SUPPLIER_ID` int(11) NOT NULL,
PRIMARY KEY (`RECEIPT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
「を受け取る」を持っています」テーブルの 'fk_poは'
ALTER TABLE `fourthwave`.`receive`
ADD CONSTRAINT `fk_po`
FOREIGN KEY (`PO_NUMBER`)
REFERENCES `fourthwave`.`po` (`PO_ID`)
ON DELETE SET NULL
ON UPDATE SET NULL
, ADD INDEX `fk_po` (`PO_NUMBER` ASC)
を受け取るしかし、上記のALTERクエリがエラーをスローします:
Error Code: 1005. Can't create table 'fourthwave.#sql-aec_11' (errno:150)
私はFiのため、このエラーを取得しています両方のテーブルの 'PO_ID'と 'PO_NUMBER'は異なっていますか?
これは機能しましたか?同じ名前のインデックスとFK制約を設定できますか? –
はい、動作します。別の名前を付けることもできますが、このインデックスを作成しないと、MySQLは同じ名前でそれを作成します。 – Devart
興味深い。 FKを追加して制約の名前を省略すると、MySQLは常に自動的に 'some_table_ibfk_1'のようなものを入力します。これはインデックスとFKに関して名前の衝突がないことを保証するものです。 –