在mysql中创建表时出现语法错误

时间:2013-04-11 17:40:54

标签: mysql sql

我正在使用MAMP phpmyadmin并且正在学习简单的sql来创建一个数据库,其中一个成员可以查看一本书。我可以创建两个第一个表但是在Order表中失败了。

我哪里错了?

CREATE TABLE if not exists book (
    b_id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title varchar(30),
    author varchar(50),
    publisher varchar(25)
)

CREATE TABLE if not exists Member (
    m_id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    firstname varchar(30),
    lastname varchar(30),
    address varchar(20)
)

CREATE TABLE if not exists Order (
    o_id int AUTO_INCREMENT PRIMARY KEY,
    b_id int FOREIGN KEY REFERENCES Book(b_id),
    m_id int FOREIGN KEY REFERENCES Member(m_id)
)

2 个答案:

答案 0 :(得分:4)

Order是MySQL中的reserved word。如果要将它用作表/列的名称,则需要在其周围使用反引号。

CREATE TABLE if not exists `Order` ( ...

列类型也必须匹配FOREIGN KEY约束:

b_id int UNSIGNED,
m_id int UNSIGNED

See a demo

答案 1 :(得分:1)

除了ORDER是保留字,并且要求数据类型与完全匹配之外,MySQL不支持声明与列内联的外键的语法。您必须与列分开声明外键约束。两种语法形式都是标准的ANSI SQL,但InnoDB仅支持表级约束声明。

以下是我测试并开始使用MySQL 5.5.30的声明:

CREATE TABLE if not exists `Order` (
     o_id int AUTO_INCREMENT PRIMARY KEY,
     b_id int unsigned,
     m_id int unsigned,
     FOREIGN KEY (b_id) REFERENCES book(b_id),
     FOREIGN KEY (m_id) REFERENCES Member(m_id)
);