我有一个 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,但这不会导致创建约束时出现错误。
最佳答案
请检查不同机器上数据库表的引擎。对于外键约束,支持 InnoDB。 ENGINE=InnoDB 应显示在“show create table 表名”中
数据库模式应该像这样创建:
创建表 STATE ( 状态码 char(2), 描述 varchar(30) NOT NULL, 约束state_statecode_pk主键(statecode))ENGINE=InnoDB;
关于mysql - 向 MySQL 数据库添加外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29515044/