sql >> Base de Datos >  >> RDS >> Database

Cómo crear una tabla con una clave externa en SQL

Problema:

Desea crear una clave externa para una tabla en una base de datos.

Ejemplo:

Nos gustaría crear una tabla llamada student que contiene una clave foránea que hace referencia al id columna en la tabla city .

Solución 1 (nueva tabla):

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)
);

Discusión:

Para crear una nueva tabla que contenga una columna de clave externa que haga referencia a otra tabla, use la palabra clave FOREIGN KEY REFERENCES al final de la definición de esa columna. Siga eso con el nombre de la tabla a la que se hace referencia y el nombre de la columna a la que se hace referencia entre paréntesis.

En nuestro ejemplo, creamos la tabla student usando un CREATE TABLE cláusula. Enumeramos los nombres de las columnas y ponemos sus respectivos tipos de datos entre paréntesis. La columna city_id es la clave foránea en esta tabla e indica el valor del ID almacenado en la columna id en la tabla city . Escribimos FOREIGN KEY REFERENCES al final de la definición de esta columna y síguela con la tabla y la columna a las que se hace referencia:city(id) .

Tenga en cuenta que puede crear más de una clave externa para una tabla.

Solución 2 (nueva tabla):

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)
);

Discusión:

Otra forma de definir una clave externa durante la creación de una tabla es usar las FOREIGN KEY REFERENCES cláusula al final de las definiciones de columna. En este caso, después de la FOREIGN KEY cláusula, designamos la columna de clave externa. Luego viene el REFERENCES clause cláusula junto con el nombre de la tabla y la columna referidas.

Puede crear claves externas en más de una columna, como se muestra a continuación:

Solución 3 (nueva tabla):

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)
);

En este ejemplo, la restricción fk_student_score_subject_id es una clave externa que consta de dos columnas:score_id y subject_id . Estas dos columnas de clave externa se refieren a dos columnas en la tabla score_subjectscore_id y subject_id .

Aquí hay otro ejemplo:

Solución 4 (tabla nueva):

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)
);

Discusión:

En este código, nuevamente tenemos la CONSTRAINT cláusula con el nombre de esta restricción. Use nombres que sean fáciles de leer y entender. En nuestro ejemplo, usamos el nombre fk_student_city_id , que indica la tabla y la columna relevantes. A continuación, escribimos FOREIGN KEY y agregue (entre paréntesis) el nombre de la columna que se convierte en la clave externa. Luego tenemos las REFERENCES clause cláusula seguida del nombre de la tabla y la columna a la que se hace referencia (aquí:id ).

Solución 5 (tabla existente):

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

Discusión:

También es posible agregar una nueva clave externa a una tabla existente. Aquí, la tabla se altera usando un ALTER TABLE cláusula. El nombre de la tabla (en nuestro ejemplo, student ) se coloca después de ALTER TABLE palabra clave. A continuación, ADD FOREIGN KEY La cláusula va seguida del nombre de la columna que se utilizará como clave externa. Luego tenemos la cláusula REFERENCES clause con el nombre de la tabla referenciada y el nombre de la columna de clave principal entre paréntesis.

Tenga en cuenta que la tabla que está modificando debe existir antes de que se ejecute este comando.

Solución 6 (tabla existente, restricción de clave externa):

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

Discusión:

Utilice una consulta como esta si desea nombrar una columna de clave externa como restricción para una tabla existente. Aquí, la restricción de clave externa se llama fk_student_city_id . Si no especifica el nombre de la restricción, la base de datos genera un nombre de restricción predeterminado (que variará según la base de datos).