programing

MySQL에 여러 개의 열 외부 키가 있습니까?

copysource 2023. 1. 24. 09:59
반응형

MySQL에 여러 개의 열 외부 키가 있습니까?

테이블에는 2개의 컬럼(product_id, attribute_id)으로 구성된 프라이머리 키가 있습니다.이 표를 참조해야 할 다른 테이블이 있습니다.다른 테이블의 외부 키를 2개의 프라이머리 키로 테이블 내의 행에 링크하려면 어떻게 해야 합니까?

다음과 같은 방법으로 해결되어야 합니다.

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은 적용하지 않습니다.(구문은 해석되지만 무시됩니다)

테이블에는 프라이머리 키를 1개만 사용할 수 있습니다.는 여러 개의 필드로 구성될 수 있지만 기본 키의 수는 증가하지 않습니다. 여전히 기본 키가 하나 있습니다.

PK 쌍의 일부가 고유하지 않기 때문에 REFERENCEs t1(f1, f2)의 2개의 필드를 참조하는 외부 키도 작성할 필요가 있습니다.

외부 키에 대한 논리를 원한다면 다음과 같이 하십시오.

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)

언급URL : https://stackoverflow.com/questions/953035/multiple-column-foreign-key-in-mysql

반응형