将外键添加到MySQL数据库

时间:2015-04-08 12:47:05

标签: mysql foreign-keys

我有一个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,但这不会导致创建约束时出错。

2 个答案:

答案 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上,表销售不存在,并且您不能将外键设为表不存在。