열을 추가하고 단일 MySQL 문에서 외래 키로 만드는 방법은 무엇입니까?


82

mysql에서 동일한 문에 열과 외래 키를 추가 할 수 있습니까? 그리고 fk를 추가하기위한 적절한 구문은 무엇입니까?

내 SQL은 다음과 같습니다.

ALTER TABLE database.table
 ADD COLUMN columnname INT DEFAULT(1),
 FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE;

... 및 동반 오류 메시지 :

SQL 구문에 오류가 있습니다. 4 행의 'FOREIGN KEY (fk_name) REFERENCES reftable (refcolumn) ON DELETE CASCADE'근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 설명서를 확인하십시오.

답변:


98

이 시도:

ALTER TABLE database.table
  ADD COLUMN columnname INT DEFAULT(1),
  ADD FOREIGN KEY fk_name(fk_column) REFERENCES reftable(refcolumn) ON DELETE CASCADE;

6
그리고위한 fk_name그리고 fk_column나는 whaat 삽입해야 ...?
C4d

7
@ C4ud3x fk_name는 식별 (쿼리에서 선택 사항)을 위해이 특정 제약 조건을 부여하려는 이름이 될 것입니다. mysql은이 를 자동 생성하고 fk_column외래 키로 작동하려는 참조 열입니다.
Rabia Naz khan 2015 년

1
모든 사람에게 제약 이름을 명시 적으로 지정하도록 조언합니다. 나중에 해당 열을 삭제하려는 경우 불쾌한 문제가 발생할 수 있으며 시스템은 제약 조건 (예 : mariaDB 대 mySQL)의 이름을 자동으로 지정하는 방법에 대해 다른 아이디어를 가진 다른 db에서 이미 실행됩니다. 이 코드 한 줄을 아끼고 싶었고 여기처럼 제약 조건을 지정하지 않았습니다. 가격을 지불 한 후 몇 달 후 모든 시스템에서 열을 삭제하는 마이그레이션을 작성하려고했습니다. stackoverflow.com/questions/55374835/…
Alkis Mavridis

39

다음 쿼리는 alter 쿼리로 열을 추가하고 제약 조건 쿼리는 단일 mysql 쿼리에서 FK로 만듭니다. 이렇게 할 수 있습니다.

통사론:

ALTER TABLE `SCHEMANAME`.`TABLE1` 
ADD COLUMN `FK_COLUMN` BIGINT(20) NOT NULL, 
ADD CONSTRAINT `FK_TABLE2_COLUMN` FOREIGN KEY (`FK_COLUMN`) 
REFERENCES `SCHEMANAME`.`TABLE2`(`PK_COLUMN`);

예:

ALTER TABLE `USERDB`.`ADDRESS_TABLE` 
ADD COLUMN `USER_ID` BIGINT(20) NOT NULL AFTER `PHONE_NUMBER`, 
ADD CONSTRAINT `FK_CUSTOMER_TABLE_CUSTOMER_ID` FOREIGN KEY (`USER_ID`) 
REFERENCES `USERDB`.`CUSTOMER_TABLE`(`CUSTOMER_ID`); 

3

이것은 약간 단순화 될 수 있습니다. "FOREIGN KEY"앞에 "ADD"키워드를 추가하기 만하면됩니다. 아래에 예제를 추가하십시오.

ALTER TABLE database.table
ADD COLUMN columnname INT DEFAULT(1),
ADD FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE;

-3

사용할 수 있습니다.

ALTER TABLE database.table
ADD COLUMN columnname INT DEFAULT(1);
ALTER TABLE database.table add FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.