2010-12-03 13 views
6

Ich habe mir die MySQL 5.1-Dokumentation angeschaut und kann das immer noch nicht herausfinden - da habe ich einen Unterschied zwischen dem Code, den ich in MySQL eingegeben habe und dem Ausgabecode vom System bemerkt.In MySQL, mit FKs was "CONSTRAINT" tun?

Was ist der Unterschied zwischen den Codebeispielen 01 und 02, dh 02 hat hinzugefügt CONSTRAINT vor FOREIGN KEY - warum und was ist zu tun?

CODE_SAMPLE_01:

FOREIGN KEY (TABLE_02_nID_FK__TABLE_01_sID_PK) REFERENCES TABLE_01(TABLE_01_sID_PK), 

RAHMEN:

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`) 

RAHMEN:

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; 

Antwort

9

Das optionale CONSTRAINT Schlüsselwort können Sie einen Namen für den Fremdschlüssel angeben. Ohne es wird automatisch ein Name generiert.

Dieser Name kann in der Tabelle INFORMATION_SCHEMA TABLE_CONSTRAINTS gesehen werden.

+0

Danke, schöne klare Antwort in Bezug auf was es ist, obwohl ich keine Ahnung habe, was die INFORMATION_SCHEMA ist; Ich schaue auf den Link, den Sie angegeben haben, und auf die übergeordneten Links in den Breadcrumbs von MySQL. Ist das eine Datenbank für die Datenbank? Noch einmal Danke! – blunders

+2

@blinders: INFORMATION_SCHEMA ist eine virtuelle Datenbank in MySQL. 'SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS' –

+0

Sehr cool, danke - Ihre Antworten waren eine große Hilfe! (+2, plus als Antwort ausgewählt) – blunders