0

次の表を作成することは許可されていません。複合主キーが原因ですか?コードに問題がある場合に備えて、users と titles テーブルの情報も追加しました。

CREATE TABLE store
(
    short_name  VARCHAR(5)                      NOT NULL,
    name        VARCHAR(30)                     NOT NULL,
    address1    VARCHAR(50)                     NOT NULL,
    address2    VARCHAR(20),
    city        VARCHAR(30)                     NOT NULL,
    state       VARCHAR(30)                     NOT NULL,
    zip         VARCHAR(10)                     NOT NULL,
    phone       VARCHAR(15)                     NOT NULL,
    CONSTRAINT store_pk PRIMARY KEY (short_name)
);

CREATE TABLE publishers
(
    name        VARCHAR(50)                         NOT NULL,
    status      TINYINT         DEFAULT 1           NOT NULL,
    CONSTRAINT publishers_pk PRIMARY KEY (name)
);
CREATE TABLE users
(
    id          INT                     NOT NULL    AUTO_INCREMENT,
    name        VARCHAR(70)                     NOT NULL,
    password    VARCHAR(60),        
    address1    VARCHAR(50)                     NOT NULL,
    address2    VARCHAR(20),
    city        VARCHAR(30)                     NOT NULL,
    state       VARCHAR(30)                     NOT NULL,
    zip         VARCHAR(10)                     NOT NULL,
    phone       VARCHAR(15),
    email       VARCHAR(90),
    store       VARCHAR(5),
    admin       TINYINT             DEFAULT 0   NOT NULL,
    mail_list   TINYINT             DEFAULT 0   NOT NULL,
    active      TINYINT             DEFAULT 0   NOT NULL,
    CONSTRAINT users_pk PRIMARY KEY (id),
    CONSTRAINT users_fk FOREIGN KEY (store)
        REFERENCES store (short_name)
        ON DELETE   SET NULL
        ON UPDATE   CASCADE
);

CREATE TABLE titles
(
    id          INT                 NOT NULL    AUTO_INCREMENT,
    publisher   VARCHAR(50),
    title       VARCHAR(50)         NOT NULL,
    status      ENUM('active', 'announced', 'inactive'),
    discount    TINYINT             NOT NULL,
    CONSTRAINT title_pk PRIMARY KEY (id),
    CONSTRAINT title_fk FOREIGN KEY (publisher)
        REFERENCES publishers (name)
        ON DELETE   SET NULL
        ON UPDATE   CASCADE
);

CREATE TABLE subscriptions
(
    user        INT,
    title       INT,
    quantity    TINYINT             DEFAULT 1           NOT NULL,
    CONSTRAINT subscription_pk PRIMARY KEY (user, title),
    CONSTRAINT subscription_user_fk FOREIGN KEY (user)
        REFERENCES users (id)
        ON DELETE   SET NULL
        ON UPDATE   CASCADE,
    CONSTRAINT subscription_title_fk FOREIGN KEY (title)
        REFERENCES titles (id)
        ON DELETE   SET NULL
        ON UPDATE   CASCADE
);
4

3 に答える 3

2

テーブル定義を使用すると、テーブルだけがsubscriptions問題を引き起こしました。これはON DELETE SET NULL句が原因です。user表の列とtitle列は両方とも!subscriptionsとして定義されます。NOT NULL

于 2013-04-09T21:22:00.740 に答える
0

主キーの定義が間違っています。constraint title_pk primary key (id)そしてそれらは同じように間違っています。彼らは次のようになるべきですprimary key(id)

于 2013-04-09T21:02:34.380 に答える
0

おそらく外部キー制約で失敗しています。

これを実行します:

SHOW ENGINE INNODB STATUS\G

そして、「LATEST FOREIGN KEY ERROR」セクションを見てください。それはあなたに問題を教えてくれるはずです。

users および/または titles テーブルがまだ存在しない場合は、テーブルを作成する前にこれを実行する必要があります。

set foreign_key_checks = 0;

これらのテーブルが存在する場合、親列 (つまり user.id) と子列 (つまり user) の間でデータ型が一致しない可能性があります。

于 2013-04-09T21:03:58.997 に答える