2013-04-11 70 views
0

我正在使用MAMP phpmyadmin并且正在学习简单的sql来创建数据库,其中成员可以检出一本书。我能够创建两个第一个表,但在订单表中失败。在mysql中创建表时出现语法错误

我哪里错了?

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) 
) 
+1

什么是错误讯息您收到? – cdhowie 2013-04-11 17:42:39

+0

缺少'unsigned'位? – 2013-04-11 17:43:21

回答

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

除了次序的保留字,并要求该数据类型匹配恰好, MySQL不支持与该列内联外键声明的语法。您必须从列中分别声明外键约束。两种语法形式都是标准的ANSI SQL,但InnoDB仅支持表级约束声明。

这里的发言中,我测试,得到了MySQL的30年5月5日的工作:

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) 
);