You are on page 1of 21

MYSQL DIA3

Freddy Condori Guevara

CLAVE PRIMARIA
Una clave primaria es una clave candidata que ha sido diseada para identificar de manera nica a los registros de una tabla a travs de toda la estructura de la base de datos. La seleccin de una clave primaria es muy importante en el diseo de una base de datos, ya que es un elemento clave de los datos que facilita la unin de tablas y el concepto total de una base de datos relacional.

CLAVE PRIMARIA(2)
Las claves primarias deben ser nicas y no nulas, de manera que garanticen que una fila de una tabla pueda ser siempre referenciada a travez de su clave primaria. MySQL requiere que se especifique NOT NULL para las columnas que se van a utilizar como claves primarias al momento de crear una tabla.

CLAVES FORANEAS E INTEGRIDAD REFERENCIAL


Podemos decir de manera simple que integridad referencial significa que cuando un registro en una tabla haga referencia a un registro en otra tabla, el registro correspondiente debe existir. Por ejemplo, consideremos la relacin entre una tabla cliente y una tabla venta.

CLAVES FORANEAS EN MYSQL


Para trabajar con claves forneas, necesitamos hacer lo siguiente:

Crear ambas tablas del tipo InnoDB. Usar la sintaxis FOREIGN KEY(campo_fk) REFERENCES nombre_tabla (nombre_campo) Crear un ndice en el campo que ha sido declarado clave fornea

CLAVES FORANEAS EN MYSQL(2)


InnoDB no crea de manera automtica ndices en las claves forneas o en las claves referenciadas, as que debemos crearlos de manera explcita. Los ndices son necesarios para que la verificacin de las claves forneas sea ms rpida. Mas adelante se muestra como definir las dos tablas de ejemplo con una clave fornea.

CLAVES FORANEAS EN MYSQL(3)


La sintaxis completa de una restriccin de clave fornea es la siguiente:
[CONSTRAINT smbolo] FOREIGN KEY (nombre_columna, ...) REFERENCES nombre_tabla (nombre_columna, ...) [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}] [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

CLAVES FORANEAS EN MYSQL(4)


Las columnas correspondientes en la clave fornea y en la clave referenciada deben tener tipos de datos similares para que puedan ser comparadas sin la necesidad de hacer una conversin de tipos. El tamao y el signo de los tipos enteros debe ser el mismo. En las columnas de tipo caracter, el tamao no tiene que ser el mismo necesariamente.

EJEMPLO LLAVE FORANEA


CREATE TABLE cliente ( id_cliente INT NOT NULL, nombre VARCHAR(30), PRIMARY KEY (id_cliente) ) TYPE = INNODB;

EJEMPLO LLAVE FORANEA(2)


CREATE TABLE venta ( id_factura INT NOT NULL, id_cliente INT NOT NULL, cantidad INT, PRIMARY KEY(id_factura), INDEX (id_cliente), FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente) ) TYPE = INNODB;

OPCIONES DE ELIMINACION LLAVE FORANEA


Las opciones estndar cuando se elimina una registro con clave fornea son:

ON DELETE RESTRICT ON DELETE NO ACTION ON DELETE CASCADE ON DELETE SET NULL

OPCIONES DE ELIMINACION LLAVE FORANEA(2)


ON DELETE RESTRICT es la accin predeterminada, y no permite una eliminacin si existe un registro asociado. ON DELETE NO ACTION hace lo mismo.

Si se especifica ON DELETE CASCADE, y una fila en la tabla padre es eliminada, entonces se eliminarn las filas de la tabla hijo cuya clave fornea sea igual al valor de la clave referenciada en la tabla padre.

OPCIONES DE ELIMINACION LLAVE FORANEA(3)


Si se especifica ON DELETE SET NULL, las filas en la tabla hijo son actualizadas automticamente poniendo en las columnas de la clave fornea el valor NULL. Si se especifica una accin SET NULL, debemos asegurarnos de no declarar las columnas en la tabla como NOT NULL

OPCIONES DE ACTUALIZACION LLAVE FORANEA


Estas opciones son muy similares cuando se ejecuta una sentencia UPDATE, en lugar de una sentencia DELETE. Estas son:

ON UPDATE CASCADE ON UPDATE SET NULL ON UPDATE RESTRICT

EJEMPLO DE LLAVES FORANEAS

CARGANDO DATOS EN UNA TABLA


Usaremos la sentencia CREATE TABLE para indicar como estarn conformados los registros de nuestras mascotas.
mysql> CREATE TABLE mascotas( nombre VARCHAR(20), propietario VARCHAR(20), especie VARCHAR(20), sexo CHAR(1), nacimiento DATE, fallecimento DATE); Query OK, 0 rows affected (0.02 sec) mysql>

CARGANDO DATOS EN UNA TABLA(2)


Despus de haber creado una tabla, ahora podemos incorporar algunos datos en ella, para lo cual haremos uso de las sentencias INSERT y LOAD DATA. INSERT INTO mascotas values ('Fluffy', 'Arnoldo', 'Gato', 'f','1999-02-04', NULL);

CARGANDO DATOS EN UNA TABLA(3)


Ya que estamos iniciando con una tabla vaca, lo que podriamos hacer es crear un archivo que contenga las sentencias insert de los valore que se quieren insertar en la base de datos. Una vez creado este archivo lo ejecutamos con el comando: mysql> \. mascotas_datos.sql

CONTENIDO ARCHIVO
INSERT INTO mascotas values ('Fluffy', 'Arnoldo', 'Gato', 'f','1999-02-04', NULL); INSERT INTO mascotas values ('Mau', 'Juan', 'Gato', 'f','1999-03-17', NULL); INSERT INTO mascotas values ('Kaiser', 'Diana', 'Perro', 'm','1998-11-20', '199-07-29'); INSERT INTO mascotas values ('Chispa', 'Omar', 'Ave', NULL ,'2000-0209', NULL);

CARGANDO DATOS EN UNA TABLA(4)


la otra manera ms fcil talvez es crear un archivo de texto que contenga un registro por lnea para cada uno de nuestros animalitos para que posteriormente carguemos el contenido del archivo en la tabla nicamente con una sentencia:
mysql> LOAD DATA LOCAL INFILE "mascotas_datos2.txt" INTO TABLE mascotas;

CONTENIDO ARCHIVO
Fluffy Arnoldo Gato Mau Juan Gato Misifus Romulo Perro Karman Caro Gato f f m m 1999-02-04 1999-03-17 1997-05-26 1999-12-10 \N \N \N \N

You might also like