1

この MYSQL 5.0 構文のどこが間違っているか知っている人はいますか?

CREATE TABLE IF NOT EXISTS target (
  _id int(11) NOT NULL AUTO_INCREMENT,
  time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  map_id int(11) DEFAULT NULL,
  left int(11) DEFAULT NULL,
  top int(11) DEFAULT NULL,
  status tinyint(1) NOT NULL,
  temperature int(11) DEFAULT NULL,
  humidity float DEFAULT NULL,
  lum int(11) DEFAULT NULL,
  PRIMARY KEY (_id),
  FOREIGN KEY (map_id) REFERENCES map(id) ON DELETE CASCADE
)

エラーを表示します:

SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、5 行目の「left INTEGER DEFAULT NULL, top INTEGER DEFAULT NULL, status tinyint(1) NOT」を使用する正しい構文を確認してください

4

3 に答える 3

2

leftMySQL 5.0 の予約語だからです。また、フィールド名をエスケープすることはできますが、テーブル定義で予約語を使用することは決して良い考えではありません。

于 2011-12-29T17:32:38.857 に答える
2

次のように記述する必要があります。

CREATE TABLE IF NOT EXISTS target (
  _id int(11) NOT NULL AUTO_INCREMENT,
  time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  map_id int(11) DEFAULT NULL,
  `left` int(11) DEFAULT NULL,
  top int(11) DEFAULT NULL,
  status tinyint(1) NOT NULL,
  temperature int(11) DEFAULT NULL,
  humidity float DEFAULT NULL,
  lum int(11) DEFAULT NULL,
  PRIMARY KEY (_id),
  FOREIGN KEY (map_id) REFERENCES map(id) ON DELETE CASCADE
)

左の行の `` (バッククォート) 文字を見てください!

于 2011-12-29T17:34:45.723 に答える
0

フィールド名として予約語を使用しています。それはできますが、次のように適切にエスケープする必要があります。

CREATE TABLE IF NOT EXISTS target (
  `_id` int(11) NOT NULL AUTO_INCREMENT,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `map_id` int(11) DEFAULT NULL,
  `left` int(11) DEFAULT NULL,
  `top` int(11) DEFAULT NULL,
  `status` tinyint(1) NOT NULL,
  `temperature` int(11) DEFAULT NULL,
  `humidity` decimal(13,2) DEFAULT NULL,
  `lum` int(11) DEFAULT NULL,
  PRIMARY KEY (_id),
  FOREIGN KEY (map_id) REFERENCES map(id) ON DELETE CASCADE
)

私のアドバイスは、予約名を避けることです。

于 2011-12-29T17:35:16.347 に答える