2010-12-03 4 views
6

He visto los documentos de MySQL 5.1, y aún no puedo descifrar esto; noté una diferencia entre el código que ingresé en MySQL y el código de salida del sistema.En MySQL, con FKs, ¿qué es la "RESTRICCIÓN"?

Cuál es la diferencia entre el código muestra 01 y 02, lo que significa que 02 ha agregado CONSTRAINT antes de FOREIGN KEY - ¿por qué y qué hace?

CODE_SAMPLE_01:

FOREIGN KEY (TABLE_02_nID_FK__TABLE_01_sID_PK) REFERENCES TABLE_01(TABLE_01_sID_PK), 

CONTEXTO:

CREATE TABLE `TABLE_02` (
    `TABLE_02_sID_PK` int(8) NOT NULL, 
    `TABLE_02_nID_FK__TABLE_01_sID_PK` int(8) NOT NULL, 
    `TABLE_02_cID` int(8) NOT NULL, 
    `TABLE_02_data01` varchar(128) default NULL, 
    `TABLE_02_data02` varchar(128) NOT NULL, 
    `create_timestamp` DATETIME DEFAULT NULL, 
    `update_timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`TABLE_02_sID_PK`), 
    FOREIGN KEY (TABLE_02_nID_FK__TABLE_01_sID_PK) REFERENCES TABLE_01(TABLE_01_sID_PK), 
    INDEX `TABLE_02_nID_FK__TABLE_01_sID_PK` (`TABLE_02_nID_FK__TABLE_01_sID_PK`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CODE_SAMPLE_02:

CONSTRAINT `table_02_ibfk_1` FOREIGN KEY (`TABLE_02_nID_FK__TABLE_01_sID_PK`) REFERENCES `table_01` (`TABLE_01_sID_PK`) 

CONTEXTO:

CREATE TABLE `table_02` (
    `TABLE_02_sID_PK` int(8) NOT NULL, 
    `TABLE_02_nID_FK__TABLE_01_sID_PK` int(8) NOT NULL, 
    `TABLE_02_cID` int(8) NOT NULL, 
    `TABLE_02_data01` varchar(128) DEFAULT NULL, 
    `TABLE_02_data02` varchar(128) NOT NULL, 
    `create_timestamp` datetime DEFAULT NULL, 
    `update_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`TABLE_02_sID_PK`), 
    KEY `TABLE_02_nID_FK__TABLE_01_sID_PK` (`TABLE_02_nID_FK__TABLE_01_sID_PK`), 
    CONSTRAINT `table_02_ibfk_1` FOREIGN KEY (`TABLE_02_nID_FK__TABLE_01_sID_PK`) REFERENCES `table_01` (`TABLE_01_sID_PK`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Respuesta

9

La palabra clave CONSTRAINT opcional le permite especificar un nombre para la clave externa. Sin eso, un nombre se generará automáticamente.

Este nombre se puede ver en la tabla INFORMATION_SCHEMA TABLE_CONSTRAINTS.

+0

Gracias, buena respuesta clara en cuanto a lo que es, aunque no tengo idea de lo que es INFORMATION_SCHEMA; Miro el enlace que proporcionaste y sus enlaces principales en las rutas de exploración de MySQL. ¿Es eso una base de datos para la base de datos? ¡Gracias otra véz! – blunders

+2

@blunders: INFORMATION_SCHEMA es una base de datos virtual en MySQL. 'SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS' –

+0

Muy bien, gracias, ¡tus respuestas fueron de gran ayuda! (+2, más seleccionado como la respuesta) – blunders

Cuestiones relacionadas