【问题标题】:Error creating table: You have an error in your SQL syntax near 'order( order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id ' at line 1 [duplicate]创建表时出错:您的 SQL 语法在第 1 行的 'order(order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id' 附近有错误 [重复]
【发布时间】:2013-10-19 13:50:24
【问题描述】:

我正在尝试使用 PHP 脚本在同一个 MySQL 数据库中创建 2 个表: 具有主键 'user_id' 的表 'user' 和具有主键 'order_id' 和外键 'user_id' 的表 'order' 来自 'user' 表(一对多关系)。

表用户创建成功没有问题:

$sql="CREATE TABLE user(
    user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    type ENUM('member','admin') NOT NULL,
    username VARCHAR(30) NOT NULL,
    email VARCHAR(80) NOT NULL,
    pass VARBINARY(32) NOT NULL,
    first_name VARCHAR(40) NOT NULL,
    last_name VARCHAR(40) NOT NULL,
    date_expires DATE NOT NULL,
    date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    date_modified TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
    PRIMARY KEY (user_id),
    UNIQUE (username),
    UNIQUE (email) 
    )ENGINE=InnoDB DEFAULT CHARSET=utf8";

但是,我无法创建表格顺序:

$sql="CREATE TABLE order(
    order_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    user_id INT UNSIGNED NOT NULL,
    transaction_id VARCHAR(19) NOT NULL,
    payment_status VARCHAR(15) NOT NULL,
    payment_amount DECIMAL(6,2) UNSIGNED NOT NULL,
    payment_date_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (order_id),
    FOREIGN KEY (user_id) REFERENCES user (user_id)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8";

我收到以下错误:

Error creating table: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order( order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id ' at line 1

已经检查了语法,找不到错误。你能告诉我出了什么问题吗?非常感谢。

【问题讨论】:

  • ORDER 是 SQL 中的保留字。

标签: mysql sql database mysql-error-1064


【解决方案1】:

你需要像order一样用反引号转义reserved words

CREATE TABLE `order` ( ...

或者更好地使用其他名称。

【讨论】:

  • 我应该总是以这种方式声明我的表“名称”吗?到目前为止,我的教科书并不在意……
  • @Neo83 - 这是一个好习惯,与列名相同
  • @Neo83:这取决于你。就我个人而言,我发现到处都有反引号令人困惑。随心所欲。
  • 刚刚将表名更改为订单,现在它可以工作了。不接受“订单”。感谢您的帮助。
  • @Neo83:您在order 周围使用了引号。反引号不同。
【解决方案2】:

order 是 mysql 使用的关键字,例如(从 tbl_name order by id ASC 中选择),因此为了避免使用关键字,您必须使用引号 `` 以避免我的 sql 错误

所以你的查询应该是

$sql="CREATE TABLE `order` (
order_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
transaction_id VARCHAR(19) NOT NULL,
payment_status VARCHAR(15) NOT NULL,
payment_amount DECIMAL(6,2) UNSIGNED NOT NULL,
payment_date_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (order_id),
FOREIGN KEY (user_id) REFERENCES user (user_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8";

享受:D

【讨论】:

  • 请注意:juergen d 几乎在 11 分钟前发布了 same answer。 :)
  • 哦,对不起,我看到了没有参考保留字的答案..这是我的错,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 2023-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多