2013-04-11 84 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) 
);