私は、2つの列(product_id、attribute_id)で構成される主キーを持つテーブルを持っています。私はこのテーブルを参照する必要がある別のテーブルを持っています。他のテーブルに外部キーを作成して、2つの主キーを持つテーブルの行にリンクするにはどうすればよいですか?MySQLの複数列の外部キー?
40
A
答えて
67
このような何かがそれを行うべき:
CREATE TABLE MyReferencingTable AS (
[COLUMN DEFINITIONS]
refcol1 INT NOT NULL,
rofcol2 INT NOT NULL,
CONSTRAINT fk_mrt_ot FOREIGN KEY (refcol1, refcol2)
REFERENCES OtherTable(col1, col2)
) ENGINE=InnoDB;
- MySQLが故に制約構文の参照列のインデックス
- 使用は、あなたが制約に名前を付けることができ、インデックスを作成するために外部キーが必要です必要に応じて後で変更と削除が容易になります。
- InnoDBは外部キーを強制しますが、MyISAMは外部キーを強制しません。 (構文が解析されますが、無視されます)
3
テーブルにはプライマリキーが1つしか存在できません。 1つのフィールドが複数のフィールドで構成されていても、プライマリキーの数は増えません。
PKペアの一部が一意ではないため、明らかに2つのフィールドも参照する外部キーを作成する必要があります。REFERENCES t1(f1、f2)。
1
この
FOREIGN KEY COmments(issue_id)
REFERENCES Bugs(issue_id) OR FeatureRequests(issue_id)
例のように、我々は外部キーのロジックをしたい場合は、いくつか:
CREATE TABLE Issues (
issue_id int PRIMARY KEY,
status VARCHAR(20)
);
CREATE TABLE Comments (
comment_id int PRIMARY KEY,
issue_type VARCHAR(20), -- "Bugs" or "FeatureRequests"
issue_id BIGINT UNSIGNED NOT NULL,
comment TEXT
);
CREATE TABLE Bugs (
issue_id int PRIMARY KEY,
severity VARCHAR(20),
FOREIGN KEY (issue_id) REFERENCES Issues(issue_id)
);
CREATE TABLE FeatureRequests (
issue_id int PRIMARY KEY,
sponsor VARCHAR(50),
FOREIGN KEY (issue_id) REFERENCES Issues(issue_id)
);
INSERT INTO Issues VALUES(1,'ON'),(2,'ON'),(3,'OFF'),(6,'OFF'),(8,'ON');
INSERT INTO Comments VALUES(1,'Bugs',1,'A'),(2,'Bugs',3,'B'),(3,'Bugs',1,'C'),(4,'Bugs',3,'D'),(5 ,'FeatureRequests',8,'L'),
(6,'FeatureRequests',6,'W'),(7,'FeatureRequests',1,'ZX');
INSERT INTO Bugs VALUES(1,'severity_1'),(3,'severity_for_3');
INSERT INTO FeatureRequests VALUES(2,'sponsor_2_'),(8,'sponsor_for_8'),(1,'sponsor_for_1')
が選択されます。
MariaDB [test]> SELECT * FROM Comments JOIN FeatureRequests ON Comments.issue_i
d = FeatureRequests.issue_id AND Comments.issue_type= 'FeatureRequests';
MariaDB [test]> SELECT * FROM Comments JOIN Bugs ON Comments.issue_id = Bugs.is
sue_id AND Comments.issue_type= 'Bugs';
+------------+------------+----------+---------+----------+----------------+
| comment_id | issue_type | issue_id | comment | issue_id | severity |
+------------+------------+----------+---------+----------+----------------+
| 1 | Bugs | 1 | A | 1 | severity_1 |
| 2 | Bugs | 3 | B | 3 | severity_for_3 |
| 3 | Bugs | 1 | C | 1 | severity_1 |
| 4 | Bugs | 3 | D | 3 | severity_for_3 |
+------------+------------+----------+---------+----------+----------------+
4 rows in set (0.00 sec)
関連する問題
- 1. 外部複合キーのMysql複合キー
- 2. MySQLデータベース、複数の外部キー
- 3. 一つの列を持つ複数の列VS複数の外部キーと外部キー
- 4. 複数の外部キーERD
- 5. 複数の外部キー
- 6. 複数の外部キー
- 7. 複数の外部キー?
- 8. mysqlの外部キー
- 9. のMySQL:外部キー
- 10. mySQLの外部キー
- 11. mysql外部キー
- 12. 複数の外部キーを使用したPHP MYSQLの送信
- 13. 2列のMySQL外部キー:整数AND文字列
- 14. 複合キーの外部キー
- 15. 外部キーのmysqlの
- 16. SQL(MySql)の外部キーと複合キーの構文エラー
- 17. mysqlの複合主キーとの外部キー関係
- 18. djangoの複数のフィールドの外部キー
- 19. GORMの複合外部キー列
- 20. 同じテーブルの複数の外部キー
- 21. 複数の外部キーの検証
- 22. 外部キーmysql php
- 23. MySQL非プライマリの外部キー
- 24. MySQLワークベンチの外部キー
- 25. 外部キーの問題MySQL
- 26. MySQLの外部キー関係
- 27. のmySQL:エラー外部キー
- 28. Mysqlデータベース間の外部キー
- 29. C#エンティティフレームワーク - 複数の外部キー
- 30. 複数の外部キー値に結合
FWIWを、 MyISAMは外部キー構文を解析して無視します。 MySQL 4.1.2以降、インデックスを重複して宣言する必要はありません。 –
Billが指摘するように、MyISAMは外部キーをサポートしていないので、両方のテーブルがInnoDBであることも確認してください。 – Abinadi
私は明示的なインデックスのために2回投票されましたか?ハーシュ。私はInnoDBが必要であることを指摘しました。 – PatrikAkerstrand