3

私は2つのテーブルを持っています:

  1. Authors(id, name, add, DOB) フィールドはそれぞれ INTEGER、CHAR(20)、CHAR(20)、DATE です。主キー = id.

  2. フィールドがそれぞれ INTEGER、CHAR(20)、CHAR(20) である本 (入札、タイトル、出版社)。主キー = 入札。

フィールド aid、bid、datePublished を使用して別のテーブル Write を作成します。

  1. aid = INTEGER ... これは実際には Authors の ID です。
  2. bid = INTEGER ...これは実際にはBooksからの入札です
  3. 主キー = (援助、入札)。

どうすればいいですか?

次のコード行を試しましたが、すべて構文エラーが発生しました。

CREATE TABLE Write (
    aid INTEGER, 
    bid INTEGER, datePublished DATE, 
    PRIMARY KEY NONCLUSTERED (aid,bid), 
    FOREIGN KEY (aid) REFERENCES Authors(id), 
    FOREIGN KEY (bid) REFERENCES Books(bid)
);

CREATE TABLE Write (
    aid INTEGER, 
    bid INTEGER, 
    datePublished DATE, 
    PRIMARY KEY (aid,bid)
);
4

3 に答える 3

3

あなたが抱えている面白い問題。その理由は、これWriteは mysql の予約済みキーワードであり、クエリでバッククォートで囲む場合にのみ識別子として使用できるためです。別の名前を選択することをお勧めします。または、本当に を使用する場合はWrite、作成クエリを次のように置き換えます。

CREATE TABLE `Write` (
    aid INTEGER, 
    bid INTEGER, 
    datePublished DATE, 
    PRIMARY KEY (aid,bid)
);

テーブルに対する他のクエリでもWriteバッククォートが必要になることを覚えておいてください。バッククォートを忘れると厄介なエラーが発生する可能性があります。

于 2012-09-26T04:42:49.970 に答える
1

Write は予約語であり、テーブルに名前を付けることはできません (バック ティックを使用できますが、バック ティックを必要とする名前は避けてください)。

完全なスキーマは次のとおりです http://sqlfiddle.com/#!2/dfe22/1

于 2012-09-26T04:46:12.633 に答える
0

これを試して :

CREATE TABLE Write (aid INTEGER, bid INTEGER, datePublished DATE PRIMARY KEY (aid,bid));
于 2012-09-26T04:39:07.067 に答える