2011-01-09 5 views
0

このコード抽出は、KohanaJobsアプリに付属のdatabase.sqlファイルからの抜粋です。MySQL:テーブルを作成するときに「キー」が何を意味しますか?

CREATE TABLE IF NOT EXISTS `roles_users` (
    `user_id` int(10) unsigned NOT NULL, 
    `role_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`user_id`,`role_id`), 
    KEY `fk_role_id` (`role_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 



CREATE TABLE IF NOT EXISTS `sessions` (
    `session_id` varchar(24) NOT NULL, 
    `last_active` int(10) unsigned NOT NULL, 
    `contents` text NOT NULL, 
    PRIMARY KEY (`session_id`), 
    KEY `last_active` (`last_active`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

はなぜちょうどKEY以上使用されてきましたか?彼らがFKとして使用されていることを意味するだけですか?

+0

zerofillを使用していない場合、なぜディスプレイの幅が10ですか?なぜそれを宣言しないのですか?user_id int unsigned not null?ああ、なぜ、バックチックも? –

+0

@ f00 - ごめんなさい。 – coder9

+1

http://pastie.org/1442882 –

答えて

1

'KEY' 行は、単に表は 'last_active' フィールド上インデックスを持っている必要があることにMySQLを語っています。

MySQLの外部キーは 'FOREIGN KEY'経由で定義されますが、InnoDBをストレージエンジンとして使用していない限り、この定義は受け入れられません。

詳細については、正直なところ読んでおくことをお勧めします。完全なCREATE TABLE構文ページをご覧ください。

+0

リンクに感謝します。私はこれを捜したが、私が見つけたのは、KEYだけでなく、FOREIGN KEYの定義だった。 – coder9

5

KEYを使用すると、INDEXの別の単語があります。

通常、KEYはINDEXの同義語です。キー属性PRIMARY KEYは、列定義で与えられたときにKEYとして指定することもできます。これは、他のデータベースシステムとの互換性のために実装されました。

(Source)

+0

クイックアンサーに感謝します。 :) – coder9

+0

私たちは、各外部キー列に対して複数の 'KEY'を持つことができますか? – coder9