2013-07-15 11 views
68

Sto tentando di aggiungere una nuova colonna che sarà una chiave esterna. Sono stato in grado di aggiungere la colonna e il vincolo di chiave esterna utilizzando due distinti comandi ALTER TABLE:Aggiungi nuova colonna con vincolo di chiave esterna in un comando

ALTER TABLE one 
ADD two_id integer 

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

C'è un modo per fare questo con un comando ALTER TABLE invece di due? Non sono riuscito a trovare nulla che funzioni.

+0

In MYSQL: http://stackoverflow.com/questions/1545253/mysql-adding-column-and-foreign-keys#answer-20758448 – knocte

risposta

95

Come spesso accade con la domanda di SQL-correlati, Dipende dal DBMS. Alcuni DBMS consentono di combinare operazioni di tabella ALTER separate da virgole. Per esempio ...

Informix sintassi:

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

La sintassi per IBM DB2 LUW è simile, ripetendo la parola ADD ma (se ho letto correttamente il diagramma) non richiedere una virgola per separare gli elementi aggiunti.

Microsoft SQL Server sintassi:

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

Alcuni altri non consentono di combinare le operazioni di ALTER TABLE così. SQL standard consente solo una singola operazione nell'istruzione ALTER TABLE, quindi in SQL standard, deve essere eseguita in due passaggi.

+6

FYI SQL Server richiede di eliminare il secondo 'ADD' – Ben

+4

Secondo Aggiungi e vincolo. – Imran

+4

Per la parte di SQL, che invia il nome al vincolo, si scrive così: ALTER TABLE [Messaggi] aggiungere [AlertTriggerID] BIGINT NULL, \t FK_Messages_AlertTriggers CONSTRAINT FOREIGN KEY (AlertTriggerID) Riferimenti AlertTriggers (AlertTriggerID); –

48

In MS-SQLServer:

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

per quale motore DB è questo? – knocte

+0

@knocte è per ms sql server - la domanda è ora taggata per chiarire che – sqladmin

+0

Non penso che la domanda abbia bisogno di chiarire, poiché la risposta accettata già afferma che c'è una grande differenza tra i motori DB su come farlo, cosa serve essere chiarito è la tua risposta, quindi ho appena fatto quello – knocte

11

Per SQL Server dovrebbe essere qualcosa di simile a

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

Questo è un po 'più conciso rispetto alle altre risposte. – Sam

1

Si può fare come qui di seguito in SQL Server

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

In Oracle:

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

In MS SQL SERVER :

Con definito dall'utente nome della chiave esterna

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

Senza definita dall'utente nome della chiave esterna

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

PostgreSQL DLL per aggiungere una colonna FK:

ALTER TABLE one 
ADD two_id INTEGER REFERENCES two; 
0

ALTER TABLE TableName ADD NewColumnName INTEGER, FOREIGN KEY(NewColumnName) REFERENCES [ForeignKey_TableName](Foreign_Key_Column)

Problemi correlati