Ejemplo práctico
Creamos dos tablas padre e hijo
Tabla padre alumnos
CREATE TABLE `alumnos` ( `id_alumno` INT UNSIGNED NOT NULL AUTO_INCREMENT , `nombre` VARCHAR(45) NULL , `apellido` VARCHAR(45) NULL , PRIMARY KEY (`id_alumno`) );
Tabla hijo datos
CREATE TABLE `datos` ( `id_alumno` INT UNSIGNED NOT NULL , `facebook` VARCHAR(45) NULL , `twitter` VARCHAR(45) NULL , `google` VARCHAR(45) NULL , PRIMARY KEY (`id_alumno`) );
Hacemos las relaciones entre las tabla padre e hijo
En la tabla hijo debemos decirle de que id depende para que cuando se borre o actualice la tabla padre también cambie
Tabla hijo
ALTER TABLE `datos` ADD CONSTRAINT `id_alumno` FOREIGN KEY (`id_alumno` ) REFERENCES `alumnos` (`id_alumno` ) ON DELETE CASCADE ON UPDATE CASCADE , ADD INDEX `id_alumno_idx` (`id_alumno` ASC) ;Llenamos las tablas con datos, tiene que ser en este orden sino no te deja ;)
Tabla padre alumnos
INSERT INTO `alumnos` (`nombre`, `apellido`) VALUES ('nombre_1', 'apellido_1'); INSERT INTO `alumnos` ( `nombre`, `apellido`) VALUES ('nombre_2', 'apellido_2'); INSERT INTO `alumnos` (`nombre`, `apellido`) VALUES ('nombre_3', 'apellido_3');
Tabla hijo datos
INSERT INTO `datos` (`id_alumno`, `facebook`, `twitter`, `google`) VALUES ('1', 'facebook_1', 'twitter_1', 'google_1'); INSERT INTO `datos` (`id_alumno`, `facebook`, `twitter`, `google`) VALUES ('2', 'facebook_2', 'twitter_2', 'google_2'); INSERT INTO `datos` (`id_alumno`, `facebook`, `twitter`, `google`) VALUES ('3', 'facebook_3', 'twitter_3', 'google_3');
Probamos eliminando y actualizando la tabla padre (alumnos)
Prueba borrar alumno (de la tabla padre alumnos), se debería borrar los datos pertenecientes a la tabla hijo (datos)delete from alumnos where id_alumno=2;
Prueba actualizar alumno (de la tabla padre alumnos), se debería actualizar los datos pertenecientes a la tabla hijo (datos)
update alumnos set nombre='nombre6',apellido='apellido6',id_alumno=6 where id_alumno=3;
Vemos que todo funciono correctamente
select * from alumnos; select * from datos;
Notas importantes
- NO PODRÁN BORRAR datos de la tabla DATOS mientras exista esa relación
- NO SE PUEDE PONER en la tabla datos el campo id_alumno como autoincremental ya que el campo ya es único
en la tabla alumnos error que siempre tenemos al relacionar las tablas, crear un id único y autoincremental en todas las tablas
ojo yo recién lo estoy aprendiendo :D - En el caso de insertar se deberá insertar primero en la tabla alumnos y con el id_alumno, insertar luego registros en la tabla datos, si queremos hacerlo al revés "NO SE PUEDE"
Espero que les sirva de algo, lo hice porque personalmente me ayuda mucho cuando necesito el código jajaja