ISO-3166-2-statusと呼ばれる別のテーブルを参照するisotempというテーブルに外部キーを設定しようとしています。前に同じユーザーの同じデータベース内の以前のすべてのテーブルへの参照を追加しましたが、今回はError Code: 1142. REFERENCES command denied to user 'symfony'@'localhost' for table 'ISO-3166-2-status.id'
が発生しました。私は(https://mariadb.com/kb/en/mariadb/grant/#table-privileges)のドキュメントを参照して、REFERENCES特権が両方のテーブルで "Unused"として列コンテキストとして文書化されていることに気付きました。MariaDB(MySQL?)外部キーを作成できません - REFERENCESコマンドが拒否されました
rootとして接続すると、エラーメッセージが表示されても、エラーなしでコマンドGRANT REFERENCES ON geo.* TO [email protected];
が実行されます。私は両方がエラーなしで実行GRANT REFERENCES ON geo.ISO-3166-2-status to [email protected];
とGRANT REFERENCES ON geo.isotemp to [email protected];
を実行しようとしたし、次は、ユーザーsymfony
としてSHOW GRANTS
コマンドの出力、次のとおりです。
GRANT FILE, REFERENCES ON *.* TO 'symfony'@'localhost' IDENTIFIED BY PASSWORD '************'
GRANT ALL PRIVILEGES ON `geo`.* TO 'symfony'@'localhost'
GRANT ALL PRIVILEGES ON `symfony`.* TO 'symfony'@'localhost'
GRANT REFERENCES ON `geo`.`ISO-3166-2-status` TO 'symfony'@'localhost'
GRANT REFERENCES ON `geo`.`isotemp` TO 'symfony'@'localhost'
...それでも私は、外部キーを作成することはできません。問題の外部キーコマンド:
SHOW CREATE TABLE `isotemp`;
CREATE TABLE `isotemp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`country` varchar(50) DEFAULT NULL,
`alpha` char(2) NOT NULL,
`status` varchar(50) NOT NULL,
`statusid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=657 DEFAULT CHARSET=utf8
SHOW CREATE TABLE `ISO-3166-2-status`;
CREATE TABLE `ISO-3166-2-status` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`status` char(24) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `status` (`status`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
私は再接続し、サーバーを再起動しようとした、無駄に:ここで
alter table isotemp add foreign key(statusid) references `ISO-3166-2-status`.`id`;
は私のテーブルです。私は明白な何かを見落としていると教えてください。永遠の感謝。
あなたは試すことができます: 'CONSTRAINT FOREIGN KEY(fk_statusid)はISO-3166-2-状態(ID)を参照するADD isotemp ALTER TABLEを、うまくいきませんでした' – Hackerman
、 'ALTER TABLEが制約外部キーを追加isotempが(statusid )参考文献ISO-3166-2-status(id); 'は成功しました。ポインタありがとう。私はすでにそれを試みたと確信していたが、私は間違っていたと思う。なぜこのフォームが有効になるべきか、他のものは有効ではないという考えはありますか? – Firestorm
MariaDBのドキュメントによれば、これはすでに作成されたテーブルに外部キーを追加する方法です。 – Hackerman