2016-08-25 25 views
0

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`; 

は私のテーブルです。私は明白な何かを見落としていると教えてください。永遠の感謝。

+0

あなたは試すことができます: 'CONSTRAINT FOREIGN KEY(fk_statusid)はISO-3166-2-状態(ID)を参照するADD isotemp ALTER TABLEを、うまくいきませんでした' – Hackerman

+0

、 'ALTER TABLEが制約外部キーを追加isotempが(statusid )参考文献ISO-3166-2-status(id); 'は成功しました。ポインタありがとう。私はすでにそれを試みたと確信していたが、私は間違っていたと思う。なぜこのフォームが有効になるべきか、他のものは有効ではないという考えはありますか? – Firestorm

+0

MariaDBのドキュメントによれば、これはすでに作成されたテーブルに外部キーを追加する方法です。 – Hackerman

答えて

0

ハッカーマンが提案したユーザー。あなたは明らかに、既に作成されたテーブルに外部キーを追加するのに、

ALTER TABLE <table1> ADD CONSTRAINT FOREIGN KEY(fk) REFERENCES <table2>(uk); 

を使用する必要があります。百万のおかげで、ハッカーマン!

1

方法は次のとおりです。

ALTER TABLE isotemp ADD CONSTRAINT fk_id FOREIGN KEY (statusid) REFERENCES ISO-3166-2-status(id); 

動作している場合はお知らせください。

関連する問題