0

価格テーブルを参照するためにテーブルに外部キーを作成しようとしていますが、これはこれまでの構文であり、エラーが発生します。

CREATE TABLE shirts(
        shirt_id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        shirt_name VARCHAR(100) NOT NULL,
        shirt_type VARCHAR(10) NOT NULL,
        shirt_size VARCHAR(20) NOT NULL,
        qp_price NUMERIC(6,2) FOREIGN KEY REFERENCES price_list.price ON price_list.price_id=shirts.qp_price NOT NULL,
        o_price NUMERIC(6,2) FOREIGN KEY REFERENCES price_list.price ON price_list.price_id=shirts.o_price NOT NULL,
        clr_options VARCHAR(30) NULL,
        qty NUMERIC(5,0) NULL
    )ENGINE=INNODB

「価格表」には、price_id、price_cat、priceの3つの列があります。シャツテーブルのqp_price列とo_price列に実行させたいのは、シャツテーブルのこれらの列に入力した数に従ってprice_listテーブルの価格列を表示することです。例えば、

私が行った場合

INSERT INTO shirts(shirt_name,shirt_type,shirt_size,qp_price,o_price)VALUES
        ('Crewneck Tee','Men','S','1','2'),
        ('Crewneck Tee','Men','M','1','2'),
        ('Crewneck Tee','Men','L','1','2'),
        ('Crewneck Tee','Men','1X','1','2'),
        ('Crewneck Tee','Men','2X','3','4'),
        ('Crewneck Tee','Men','3X','5','6'),
        ('Crewneck Tee','Men','4X','7','8'),
        ('Crewneck Tee','Men','5X','9','10')

SLクルーネックTシャツは、price_listテーブルのprice_id列にリンクしているため、price列の1行目と2行目に価格が表示されます...これを行うにはどうすればよいですか?

4

1 に答える 1

1

CREATE TABLE statmenet FOREIGN KEY REFERENCES句のONは結合ではなく、ON UPDATE CASCADE ONDELETERESTRICTなどの動作を指定するためのものです。

また、MySQL5.1に関するこのコメントは14.6.4.4で見つかりました。外部キーの制約

表1と表2の両方で、表1と表2の参照列の両方にそれぞれ索引を付けていることを確認してください。そうしないと、エラー「#1005-テーブル'プロスペクト'を作成できません(errno:105)」のフラグが立てられます。(全表スキャンを回避するため、インデックス作成は良い習慣です!)これが処理され、参照される列が同じデータ型になると、必要な数のFKを使用して目的のテーブルを正常に作成できます。

CREATE TABLE shirts(
    shirt_id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    shirt_name VARCHAR(100) NOT NULL,
    shirt_type VARCHAR(10) NOT NULL,
    shirt_size VARCHAR(20) NOT NULL,
    qp_price NUMERIC(6,2) NOT NULL, 
    o_price NUMERIC(6,2) NOT NULL, 
    clr_options VARCHAR(30) NULL,
    qty NUMERIC(5,0) NULL
    INDEX (qp_price),
    INDEX (o_price),
    FOREIGN KEY (qp_price) REFERENCES price_list(price_id),
    FOREIGN KEY (o_price) REFERENCES price_list(price_id),
)ENGINE=INNODB

参考までに、 http: //www.dpriver.com/pp/sqlformat.htmは、特定のデータベース環境が立ち上がっていない場合に非常に役立ちます。

于 2012-12-05T00:22:13.053 に答える