【发布时间】:2016-09-17 13:37:45
【问题描述】:
首先,下面是我的代码。当我在学校的 mysql 服务器上运行它时,我得到了 ERROR 1005 (HY000)。尽管此错误仅发生在客户、订单和详细信息表中。我确实收到了一些警告。根据我所做的研究,这是由于我错误地实施了 innodb 造成的。任何帮助将不胜感激,尤其是因为这只是此作业的开始步骤之一。
drop table IF EXISTS employees;
drop table IF EXISTS parts;
drop table IF EXISTS customers;
drop table IF EXISTS orders;
drop table IF EXISTS odetails;
drop table IF EXISTS zipcodes;
create table employees
(eno numeric(4,0),
ename varchar(15),
zip numeric(5,0),
hdate date default null,
primary key (eno),
foreign key (zip) references zipcodes (zip)
)ENGINE=InooDB;
create table parts
(pno numeric(5,0),
pname varchar(30),
qoh numeric(3,0),
price numeric(10,2),
level numeric(2,0),
primary key (pno)
)ENGINE=InnoDB;
create table customers
(cno numeric(4,0),
cname varchar(15),
street varchar(30),
zip numeric(5,0),
phone varchar(12),
primary key (cno),
foreign key (zip) references zipcodes (zip))
ENGINE=InnoDB;
create table orders
(ono numeric(4,0),
cno numeric(4,0),
eno numeric(4,0),
received date default null,
shipped date default null,
primary key (ono),
foreign key (cno) references customers (cno),
foreign key (eno) references employees (eno)
)ENGINE=InnoDB;
create table odetails
(ono numeric(4,0),
pno numeric(5,0),
qty numeric(1,0),
primary key (ono, pno),
foreign key (ono) references orders (ono),
foreign key (pno) references parts (pno)
)ENGINE=InnoDB;
create table zipcodes
(zip numeric(5,0),
city varchar(15),
primary key (zip)
)ENGINE=InnoDB;
【问题讨论】:
-
请阅读How to Ask 并在您的问题中包含所有相关的错误和警告。话虽如此,您的客户表通过外键引用邮政编码表,该外键仅在此脚本末尾创建,并且错误和警告都来自该问题。
-
你有一个错字
InooDB。您的数据类型也有点不标准。拍摄一个普通的简INT而不是小数(n,m)的 PK(以及其他异常,如您的邮政编码) -
哇,这一切都来自一个错字。切换到使用INT。还要感谢有关移动邮政编码的建议,忘记了。谢谢大家,我真的很感激。
-
另一个提示:在大多数国家/地区,邮政编码应该是 varchars(例如,允许前导 0)。