我正在使用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)
)
答案 0 :(得分:4)
Order
是MySQL中的reserved word。如果要将它用作表/列的名称,则需要在其周围使用反引号。
CREATE TABLE if not exists `Order` ( ...
列类型也必须匹配FOREIGN KEY
约束:
b_id int UNSIGNED,
m_id int UNSIGNED
答案 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)
);