0

我正在使用 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)
)
4

2 回答 2

4

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

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

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

b_id int UNSIGNED,
m_id int UNSIGNED

查看演示

于 2013-04-11T17:42:58.793 回答
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)
);
于 2013-04-11T17:54:29.447 回答