2010-12-03 16 views
6

MySQL 5.1 belgelerine baktım ve bunu hala çözemedim - bu, sistem tarafından MySQL'e girdiğim kod ile çıktı kodu arasındaki farkın farkına vardım.MySQL'de, FK'ler ile "CONSTRAINT" ne yapar?

01 ve 02 kod örnekleri arasındaki fark nedir, yani 02, 'u FOREIGN KEY'dan önce eklemiştir - neden, ve ne yapar?

CODE_SAMPLE_01:

FOREIGN KEY (TABLE_02_nID_FK__TABLE_01_sID_PK) REFERENCES TABLE_01(TABLE_01_sID_PK), 

İÇERİK:

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

BAĞLAMI:

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; 

cevap

9

opsiyonel CONSTRAıNT'I anahtar kelime yabancı anahtar için bir ad belirlemenizi sağlar. Bu olmadan, otomatik olarak bir isim üretilecek.

Bu ad, INFORMATION_SCHEMA TABLE_CONSTRAINTS tablosunda görülebilir.

+0

Teşekkürler, ne olduğu konusunda açık bir net cevap, ne olsa BİLGİCHEMA ne olduğu hakkında hiçbir fikrim yok; Sağladığınız bağlantıya bakıyorum ve MySQL'deki ekmek kırıntılarındaki ana bağlantılar. Bu veritabanı için bir veritabanı mı? Yine teşekkürler! – blunders

+2

@blunders: INFORMATION_SCHEMA, MySQL'de sanal bir veritabanıdır. 'SELECT * INFORMATION_SCHEMA.TABLE_CONSTRAINTS''DEN –

+0

Çok güzel, teşekkürler - cevaplarınız çok büyük bir yardım! (+2, artı cevap olarak seçildi) – blunders