-1

3 つのサブクラス テーブルを作成しています。他の 2 つは完了し、正常に動作しますが、最後のテーブルに次のコードを入力すると、このエラー (1064) が発生します。

mysql> CREATE TABLE foreign (
    -> account_no VARCHAR(16) NOT NULL,
    -> foreign_id VARCHAR(16) NOT NULL,
    -> TYPE CHAR(4) DEFAULT 'FORE' NOT NULL
    -> CHECK ( TYPE = 'FORE'),
    -> currency_TYPE CHAR(3) NOT NULL
    -> CHECK ( currency_TYPE IN ('EUR','USD','HKD')),
    -> balance DECIMAL(16,2),
    -> PRIMARY KEY(account_no, foreign_id),
    -> FOREIGN KEY(account_no, TYPE)
    -> ON UPDATE CASCADE
    -> ON DELETE CASCADE);

エラーメッセージは、 between が間違った構文を取得していることを通知しますforeign( account_no VARCHAR(16) NOT NULL, foreign_id VARCHAR(16) NOT NULL, TYPEが、それを見つけることができません。何か問題がありますか?

4

2 に答える 2

0

FOREIGN は MySQL の予約語です。

このテーブルの名前を変更するか、バッククォート ` を使用してこの名前を引用します -

CREATE TABLE `foreign` (...
于 2012-11-29T07:04:29.910 に答える
0

FOREIGN KEY(account_no, TYPE) の場合、参照列を指定する必要があります

CREATE TABLE parent (id INT NOT NULL,
                 PRIMARY KEY (id)
  ) 
 CREATE TABLE child (id INT, parent_id INT,
                INDEX par_ind (parent_id),
                FOREIGN KEY (parent_id) REFERENCES parent(id)
                  ON DELETE CASCADE
   ) 
于 2012-11-29T07:13:29.100 に答える