2

私はmysqlで遊んでいて、外部キーを定義する2つの方法を見つけました。

CREATE TABLE posts(
    id INT NOT NULL AUTO_INCREMENT,
    user_id INT NOT NULL,
    post_title VARCHAR(255) NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY name (user_id) REFERENCES users(id)
);

と:

CREATE TABLE posts(
    id INT NOT NULL AUTO_INCREMENT,
    user_id INT NOT NULL,
    post_title VARCHAR(255) NOT NULL,
    PRIMARY KEY(id),
    CONSTRAINT name
        FOREIGN KEY(user_id) 
        REFERENCES users(id)
);

これら2つの違いは何でしょうか?それらは同じですか、それはあなたがどのように書くのが好きかという好みの問題ですか?それともいくつかの違いがありますか?

4

1 に答える 1

2

FOREIGN KEY制約の下で文書化されているように:

CREATE TABLEorステートメントのInnoDB外部キー制約定義の構文はALTER TABLE次のようになります。

[制約[記号]]外部キー
    [ index_name ](index_col_name、...)
    参照tbl_nameindex_col_name、...)
    [ON DELETEreference_option ]
    [更新時reference_option ]

reference_option:
    制限| カスケード| SET NULL | 何もしない

index_name外部キーIDを表します。指定されている場合、外部キーのインデックスが明示的に定義されている場合、これは無視されます。それ以外の場合、InnoDB外部キーのインデックスを作成するindex_nameと、インデックス名に使用されます。

外部キーの定義には、次の条件が適用されます。

[ deletia ]

  • 句が指定されている場合、値はデータベース内で一意である必要があります。句が指定されていない場合は、名前が自動的に作成されます。CONSTRAINT symbolsymbolInnoDB

[ deletia ]

FOREIGN KEY外部キーを作成したときに句に名前が含まれている場合はCONSTRAINT、その名前を参照して外部キーを削除できます。それ以外の場合、fk_symbol値はInnoDB外部キーが作成されるまでに内部的に生成されます。

したがって、最初の例では、名前が付けられたインデックスを使用して、自動的に名前が付けられた外部キー制約を作成しますname(まだ存在しない場合)。一方、2番目の例では、自動生成されたインデックス名で名前が付けられた外部キー制約を作成しますname(まだ存在しない場合)。

それ以外は同じです。

于 2012-11-29T08:58:20.680 に答える