Estou tentando adicionar uma nova coluna que será uma chave estrangeira. Consegui adicionar a coluna e a restrição de chave estrangeira usando dois ALTER TABLE
comandos separados :
ALTER TABLE one
ADD two_id integer;
ALTER TABLE one
ADD FOREIGN KEY (two_id) REFERENCES two(id);
Existe uma maneira de fazer isso com um comando ALTER TABLE em vez de dois? Eu não conseguia pensar em nada que funcionasse.
Respostas:
Como tantas vezes com perguntas relacionadas ao SQL, isso depende do DBMS. Alguns DBMS permitem combinar operações da tabela ALTER separadas por vírgulas. Por exemplo...
Sintaxe do Informix :
A sintaxe do IBM DB2 LUW é semelhante, repetindo a palavra-chave ADD, mas (se eu ler o diagrama corretamente) não requer vírgula para separar os itens adicionados.
Sintaxe do Microsoft SQL Server :
Alguns outros não permitem combinar operações ALTER TABLE dessa maneira. O SQL padrão permite apenas uma única operação na instrução ALTER TABLE; portanto, no SQL padrão, isso deve ser feito em duas etapas.
fonte
No MS-SQLServer:
fonte
Para o SQL Server, deve ser algo como
fonte
No MS SQL SERVER:
Com nome de chave estrangeira definido pelo usuário
Sem nome de chave estrangeira definido pelo usuário
fonte
No Oracle :
fonte
Atualização 2020
É uma pergunta bastante antiga, mas as pessoas ainda estão voltando a ela, eu vejo. Caso as respostas acima não tenham ajudado, verifique se você está usando o mesmo tipo de dados para a nova coluna que o ID da outra tabela.
No meu caso, eu estava usando o Laravel e uso "número inteiro não assinado" para todos os meus IDs, pois não há sentido em ter um ID LOL negativo.
Portanto, para isso, a consulta SQL bruta mudará assim:
Espero que ajude
fonte
Você pode fazê-lo como abaixo no SQL Server
fonte
DLL do PostgreSQL para adicionar uma coluna FK:
fonte
ALTER TABLE TableName ADD NewColumnName INTEGER, FOREIGN KEY(NewColumnName) REFERENCES [ForeignKey_TableName](Foreign_Key_Column)
fonte
Para o DB2, a sintaxe é:
fonte
Se você também precisa adicionar valores padrão no caso de você já tem algumas linhas na tabela, em seguida, adicionar PADRÃO val
fonte
Tente o seguinte:
fonte