2011-07-02 4 views
0
create table order 
(
code int not null primary key, 
client_code int, 
suite_code int, 
gallery_code int, 
foreign key(client_code) references client(number), 
foreign key(suite_code) references suite(number), 
foreign key(gallery_code) references gallery(number) 
); 

'order'に近いSQL構文のエラーについて苦情を言います。mysqlのこのプログラムのエラーは何ですか?

+2

残念ながら、このサイトはテレパシープラグインでアップグレードされていません... – Bohemian

答えて

2

テーブルの名前をorderからmysqlによって予約されていないものに変更しても問題ありません。

0

テーブル名にSQLキーワードorderを使用しています(結果セットのソートにはorder byが使用されています)。あなたは何かにそれを変更することができますか、あなたのテーブルに名前をつけることができますorders

テーブルには1つの注文ではなく多数の注文が含まれているので、実際は後者の方が好きです。

0

また、単語orderのような、あなたのSQLステートメントにあいまいさがあり、MySQLのキーワードであると

create table `order` 
+1

キーワードの順序はmySQLで予約されており、構文を変更しても問題は解決しません。ただそれを混同します – Ryan

+0

@ Ryan:それ?それは問題を解決します:事実。バッククォートを区切るためにバッククォートを使用するときに、フィールド名としてキーワードを使用し続けるのが賢明かどうかは、有効な質問ですが、この回答が問題の解決であるという事実は変わりません。 –

+0

私は何をしていますか? – hami

0

使用することができます。

あなたは、ユーザー定義のフィールドを区切るためにバッククォートを使用する必要があります。

CREATE TABLE `order` (
    `code`   INT NOT NULL PRIMARY KEY, 
    `client_code` INT, 
    `suite_code` INT, 
    `gallery_code` INT, 
    FOREIGN KEY (`client_code`) REFERENCES `client` (`number`), 
    FOREIGN KEY (`suite_code`) REFERENCES `suite` (`number`), 
    FOREIGN KEY (`gallery_code`) REFERENCES `gallery` (`number`) 
); 

(私もあなたのクエリが漠然と読みやすくするために、キーワードを大文字にしました。)

フィールド名やキーワードをできなくもっとあいまいである。しかし、まだは、フィールド名としてキーワードを使用することをお勧めします。これは、混同しやすく、エラーを起こしやすいため、人間の読者に限り—です。

関連する問題