MySQL 4.0 soporta cinco tipos de tablas: MyISAM, ISAM, HEAP, BDB (Base de datos Berkeley), e InnoDB. BDB e InnoDB son ambas tipos de tablas transaccionales. Además de poder trabajar con transacciones en MySQL, las tablas del tipo InnoDB también tienen soporte para la definición de claves foráneas, por lo que se nos permite definir reglas o restricciones que garanticen la integridad referencial de los registros.
A partir de la versión 4.0, MySQL ha agregado InnoDB a la lista de tipos de tablas soportados en una instalación típica. En este artículo se asume que se cuenta ya con un servidor MySQL con soporte para el tipo de tablas InnoDB. En nuestro caso haremos uso de un servidor MySQL 4.013 ejecutándose en un sistema MSWindows.
Nota: para asegurarnos que tenemos soporte para el tipo de tablas InnoDB podemos ejecutar la siguiente sentencia:
mysql> SHOW VARIABLES LIKE '%innodb%';
+---------------------------------+------------------------+
| Variable_name | Value |
+---------------------------------+------------------------+
| have_innodb | YES |
| innodb_additional_mem_pool_size | 1048576 |
| innodb_buffer_pool_size | 8388608 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
| innodb_file_io_threads | 4 |
| innodb_force_recovery | 0 |
| innodb_thread_concurrency | 8 |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_fast_shutdown | ON |
| innodb_flush_method | |
| innodb_lock_wait_timeout | 50 |
| innodb_log_arch_dir | . |
| innodb_log_archive | OFF |
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 5242880 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | . |
| innodb_mirrored_log_groups | 1 |
| innodb_max_dirty_pages_pct | 90 |
+---------------------------------+------------------------+
20 rows in set (0.00 sec)
La variable más importante es por supuesto have_innodb que tiene el valor YES.
les dejo y espero que les sirva para la integridad referencial
nota la integridad referencial es:
La referencia que hace un índice primario en otro tabla.
Ejemplo.
CREATE DATABASE FFF;
USE FFF;
CREATE TABLE Departamento
(Cod_depar INT NOT Null PRIMARY KEY, descripcion VARCHAR(100))TYPE=INNODB;
CREATE TABLE empleados
(id INT NOT NULL PRIMARY KEY,
nombre VARCHAR(30),
apellido VARCHAR(30),
Cod_depar INT NOT NULL,
INDEX(cod_depar))TYPE=INNODB;
ALTER TABLE empleados ADD
FOREIGN KEY (cod_depar) REFERENCES departamento (cod_depar) ON DELETE CASCADE ON UPDATE CASCADE;
INSERT INTO departamento VALUES(1,"Control de Estudios"
INSERT INTO departamento VALUES(2,"Adiestramiento"
INSERT INTO empleados VALUES(1,"freddy","Peñalver",1);
Hasta este momento no existe ningún problema
Pero intenten realizar esto
INSERT INTO empleados VALUES(2,"vvvv","yyyy",2);
ERROR 1216: Cannot add or update a child row: a foreign key constraint fails
Nota dice: no puede agregar o actualizar el registro hijo: un foranea clave contraida archivos (algo así
INSERT INTO empleados VALUES(2,"Freddy","Peñalver",1);
INSERT INTO empleados VALUES(3,"ffffff","sssss",2);
INSERT INTO empleados VALUES(4,"vvvvv","qqqqqq",2);
SELECT * FROM departamento;
SELECT * FROM Empleados;
DELETE FROM Departamento WHERE cod_depar=1;
SELECT * FROM departamento;
SELECT * FROM Empleados;
Y vean los resultados
UPDATE Departamento SET cod_depar=25;
Y vean los resultados
Para mas información
http://www.mysql-hispano.org/page.php?id=27