我有一个DigitalOcean LAMP实例来做我的课堂作业,但是当我尝试添加外键时,在我的服务器上运行的实验室机器上的脚本会出错。
--------------
create table STATE (
statecode char(2),
description varchar(30) NOT NULL,
constraint state_statecode_pk primary key (statecode))
--------------
Query OK, 0 rows affected (0.02 sec)
--------------
create table EMPLOYER (
companyname varchar(30) NOT NULL,
division varchar(30) NOT NULL,
address varchar(30),
city varchar(20),
statecode char(2) not null,
zipcode int(5),
constraint employer_coname_div_pk PRIMARY KEY (companyname, division),
constraint employer_statecode_fk foreign key (statecode) references state(statecode))
--------------
ERROR 1215 (HY000): Cannot add foreign key constraint
哪种差异可能导致它无法在我的机器上运行,而是在实验室机器上工作?
我的电脑上的版本:5.6.19 实验室机器上的版本:5.6.21
从实验室机器显示创建表雇主:
| employer | CREATE TABLE `employer` (
`companyname` varchar(30) NOT NULL,
`division` varchar(30) NOT NULL,
`address` varchar(30) DEFAULT NULL,
`city` varchar(20) DEFAULT NULL,
`statecode` char(2) NOT NULL,
`zipcode` int(5) DEFAULT NULL,
PRIMARY KEY (`companyname`,`division`),
KEY `employer_statecode_fk` (`statecode`),
CONSTRAINT `employer_statecode_fk` FOREIGN KEY (`statecode`) REFERENCES `state` (`statecode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
他们都是InnoDB。实验室机器字符集是utf8而服务器是latin1,但这不会导致创建约束时出错。
答案 0 :(得分:0)
请检查不同计算机上数据库表的引擎。对于外键约束,支持InnoDB。 ENGINE = InnoDB应显示在“show create table tablename”
中应该创建数据库模式,如:
创建表STATE( statecode char(2), description varchar(30)NOT NULL, 约束state_statecode_pk主键(statecode))ENGINE = InnoDB;
答案 1 :(得分:0)
由于区分大小写取决于计算机的文件系统,因此实验室计算机(windows)的表格不区分大小写,服务器上的表(ubuntu)区分大小写。
因此,在Windows或OS X上引用销售表是有效的,因为SALES和销售都引用同一个表,而在Ubuntu上,表销售不存在,并且您不能将外键设为表不存在。