[sql] 하나의 명령으로 외래 키 제약 조건을 가진 새 열 추가

외래 키가 될 새 열을 추가하려고합니다. 두 가지 별도의 ALTER TABLE명령을 사용하여 열과 외래 키 제약 조건을 추가 할 수있었습니다 .

ALTER TABLE one
ADD two_id integer;

ALTER TABLE one
ADD FOREIGN KEY (two_id) REFERENCES two(id);

두 개의 ALTER TABLE 명령 대신 두 개의 ALTER TABLE 명령을 사용하여이를 수행하는 방법이 있습니까? 나는 작동하는 것을 생각 해낼 수 없었다.



답변

SQL 관련 질문과 마찬가지로 DBMS에 따라 다릅니다. 일부 DBMS에서는 ALTER 테이블 조작을 쉼표로 구분하여 결합 할 수 있습니다. 예를 들어 …

Informix 구문 :

ALTER TABLE one
    ADD two_id INTEGER,
    ADD CONSTRAINT FOREIGN KEY(two_id) REFERENCES two(id);

IBM DB2 LUW 의 구문 은 유사하며 키워드 ADD를 반복하지만 (다이어그램을 올바르게 읽으면) 추가 된 항목을 구분하기 위해 쉼표가 필요하지 않습니다.

Microsoft SQL Server 구문 :

ALTER TABLE one
    ADD two_id INTEGER,
    FOREIGN KEY(two_id) REFERENCES two(id);

다른 일부에서는 ALTER TABLE 작업을 이와 같이 결합 할 수 없습니다. 표준 SQL은 ALTER TABLE 문에서 단일 조작 만 허용하므로 표준 SQL에서는 두 단계로 수행해야합니다.


답변

MS-SQLServer에서 :

ALTER TABLE one
ADD two_id integer CONSTRAINT fk FOREIGN KEY (two_id) REFERENCES two(id)


답변

SQL Server의 경우 다음과 같아야합니다

ALTER TABLE one
ADD two_id integer constraint fk foreign key references two(id)


답변

에서 MS SQL 서버 :

사용자 정의 외래 키 이름

ALTER TABLE tableName
ADD columnName dataType,
CONSTRAINT fkName FOREIGN KEY(fkColumnName)
   REFERENCES pkTableName(pkTableColumnName);

사용자 정의 외래 키 이름이없는 경우

ALTER TABLE tableName
ADD columnName dataType,
FOREIGN KEY(fkColumnName) REFERENCES pkTableName(pkTableColumnName);


답변

에서 오라클 :

ALTER TABLE one ADD two_id INTEGER CONSTRAINT Fk_two_id REFERENCES two(id);


답변

2020 업데이트

꽤 오래된 질문이지만 사람들은 여전히 ​​내가보고있는 것으로 돌아갑니다. 위의 답변이 도움이되지 않은 경우 새 테이블에 다른 테이블의 ID와 동일한 데이터 유형을 사용하고 있는지 확인하십시오.

필자의 경우 Laravel을 사용하고 있으며 음수 ID LOL이 없다는 점이 없으므로 모든 ID에 대해 “부호없는 정수”를 사용합니다.

따라서 원시 SQL 쿼리는 다음과 같이 변경됩니다.

ALTER TABLE `table_name`
ADD `column_name` INTEGER UNSIGNED,
ADD CONSTRAINT constrain_name FOREIGN KEY(column_name) REFERENCES foreign_table_name(id);

나는 그것이 도움이되기를 바랍니다


답변

SQL Server에서 아래와 같이 할 수 있습니다

ALTER TABLE one
ADD two_id int foreign key
REFERENCES two(id)