2010-12-03 8 views
6

私はMySQL 5.1のドキュメントを見てきましたが、まだこれを理解できませんでした。つまり、私がMySQLに入力したコードとシステムによって出力されたコードの違いに気付きました。MySQLでは、FKの "CONSTRAINT"とは何ですか?

コードサンプル01と02の違いは何ですか?02はCONSTRAINTの前にFOREIGN KEYが追加されています - なぜ、それは何ですか?

CODE_SAMPLE_01:

FOREIGN KEY (TABLE_02_nID_FK__TABLE_01_sID_PK) REFERENCES TABLE_01(TABLE_01_sID_PK), 

CONTEXT:

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

CONTEXT:

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; 

答えて

9

オプションの制約キーワードは、あなたは外部キーの名前を指定することができます。それがなければ、名前が自動的に生成されます。

この名前はINFORMATION_SCHEMA TABLE_CONSTRAINTSの表に記載されています。

+0

私はINFORMATION_SCHEMAが何であるかわからないけれども、ありがとう、それは何であるかについての素晴らしい明確な答えです。あなたが提供したリンクを見ると、それはMySQLのパンくずリストの親リンクです。それはデータベースのデータベースですか?もう一度、ありがとう! – blunders

+2

@blunders:INFORMATION_SCHEMAはMySQLの仮想データベースです。 'SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS' –

+0

非常にクール、ありがとう - あなたの答えは巨大な助けでした! (+2、プラス答えとして選択) – blunders

関連する問題