integridad referencial

jaberwock
30 de Abril del 2004
como realizo la validacion de integridad referencial en mysql???

gonzalo
30 de Abril del 2004
supon que tienes una tabla "tabla1" con un campo "codigo" que hace referencia a un registro de otra tabla "tabla2" por el mismo campo.

si lanzas esta consulta:

select t1.codigo
from tabla1 t1
left join tabla2 t2 on t1.codigo=t2.codigo
where t1.codigo is not null
and t2.codigo is null

habremos detectado los registros de \'tabla1\' cuyo \'codigo\' no hace referencia a ningun registro en \'tabla2\'.

existen unas tablas en mysql llamadas innodb que permiten la integridad referencial y las transacciones, pero la mayoria de los hosting no ofrecen esta caracteristica, por lo que tenemos que conformarnos con la version limitada de mysql.

la verdad es que esta forma de comprobar la integridad referncial es un poco tediosa. seria interesante una herramienta para dicho proposito.

alex
30 de Abril del 2004
hola, en mysql existe varios tipos de tablas en las cuales una solo puede existir intregidad referencial solo debes crear las llaves foraneas que conectan las tablas con una primaria el tipo de tabla es:

InnoDB en este tipo de tabla puedes crear las relaciones... con la integridad referencial..
saludos : [email protected]
un script para que lo ejecutes
USE hospital;

*/DROP TABLE departamento; */
*/DROP TABLE ciudad; */
*/DROP INDEX codciud; */
*/DROP INDEX fk_coddepto; */

CREATE TABLE IF NOT EXISTS departamento
(
coddepto INT(2) UNSIGNED ZEROFILL NOT NULL PRIMARY KEY,
nombre CHAR(40) NOT NULL
)
TYPE = InnoDB MAX_ROWS = 50;

CREATE TABLE IF NOT EXISTS ciudad
(
coddepto INT(2) UNSIGNED ZEROFILL NOT NULL,
codciudad INT(3) UNSIGNED ZEROFILL NOT NULL,
nombre CHAR(40) NOT NULL,
INDEX fk_coddepto (coddepto),
FOREIGN KEY (coddepto) REFERENCES departamento(coddepto)
ON DELETE RESTRICT
) TYPE=InnoDB MAX_ROWS = 50;

CREATE UNIQUE INDEX codciud ON ciudad (coddepto,codciudad);