Database
 sql >> Base de Dados >  >> RDS >> Database

Como criar uma tabela com uma chave estrangeira no SQL

Problema:


Você deseja criar uma chave estrangeira para uma tabela em um banco de dados.

Exemplo:


Gostaríamos de criar uma tabela chamada student que contém uma chave estrangeira que se refere ao id coluna na tabela city .

Solução 1 (nova tabela):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
city_id INT FOREIGN KEY REFERENCES city(id)
);

Discussão:


Para criar uma nova tabela contendo uma coluna de chave estrangeira que faça referência a outra tabela, use a palavra-chave FOREIGN KEY REFERENCES no final da definição dessa coluna. Siga isso com o nome da tabela referenciada e o nome da coluna referenciada entre parênteses.

Em nosso exemplo, criamos a tabela student usando um CREATE TABLE cláusula. Listamos os nomes das colunas e colocamos seus respectivos tipos de dados entre parênteses. A coluna city_id é a chave estrangeira nesta tabela e indica o valor do ID armazenado na coluna id na tabela city . Escrevemos FOREIGN KEY REFERENCES no final da definição desta coluna e siga-a com a tabela e coluna referenciadas:city(id) .

Lembre-se de que você pode criar mais de uma chave estrangeira para uma tabela.

Solução 2 (nova tabela):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
city_id INT,
FOREIGN KEY (city_id) REFERENCES city(id)
);

Discussão:


Outra maneira de definir uma chave estrangeira durante a criação da tabela é usar as FOREIGN KEY REFERENCES cláusula no final das definições de coluna. Neste caso, após a FOREIGN KEY cláusula, designamos a coluna de chave estrangeira. Em seguida vem as REFERENCES cláusula juntamente com o nome da tabela e coluna referidas.

Você pode criar chaves estrangeiras em mais de uma coluna, conforme mostrado abaixo:

Solução 3 (nova tabela):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
score_id INT,
subject_id INT,
      CONSTRAINT fk_student_score_subject_id 
      FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id)
);

Neste exemplo, a restrição fk_student_score_subject_id é uma chave estrangeira que consiste em duas colunas:score_id e subject_id . Essas duas colunas de chave estrangeira referem-se a duas colunas na tabela score_subjectscore_id e subject_id .

Aqui está outro exemplo:

Solução 4 (nova tabela):

CREATE TABLE student (
id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
city_id INT,
      CONSTRAINT fk_student_city_id 
      FOREIGN KEY (city_id) REFERENCES city(id)
);

Discussão:


Neste código, temos novamente o CONSTRAINT cláusula com o nome dessa restrição. Use nomes que sejam fáceis de ler e entender. Em nosso exemplo, usamos o nome fk_student_city_id , que indica a tabela e a coluna relevantes. Em seguida, escrevemos FOREIGN KEY e adicione (entre parênteses) o nome da coluna que se torna a chave estrangeira. Então temos as REFERENCES cláusula seguida pelo nome da tabela e coluna referenciadas (aqui:id ).

Solução 5 (tabela existente):

ALTER TABLE student
ADD FOREIGN KEY (city_id) REFERENCES city(id);

Discussão:


Também é possível adicionar uma nova chave estrangeira a uma tabela existente. Aqui, a tabela é alterada usando um ALTER TABLE cláusula. O nome da tabela (em nosso exemplo, student ) é colocado após o ALTER TABLE palavra-chave. Em seguida, o ADD FOREIGN KEY cláusula é seguida pelo nome da coluna que será usada como chave estrangeira. Então temos a REFERENCES clause com o nome da tabela referenciada e o nome da coluna de chave primária entre parênteses.

Observe que a tabela que você está modificando deve existir antes que este comando seja executado.

Solução 6 (tabela existente, restrição de chave estrangeira):

ALTER TABLE student
      ADD CONSTRAINT fk_student_city_id 
      FOREIGN KEY (city_id) REFERENCES city(id)

Discussão:


Use uma consulta como esta se quiser nomear uma coluna de chave estrangeira como uma restrição para uma tabela existente. Aqui, a restrição de chave estrangeira é denominada fk_student_city_id . Se você não especificar o nome da restrição, o banco de dados gerará um nome de restrição padrão (que varia de acordo com o banco de dados).