mysql - 向 MySQL 数据库添加外键

标签 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,但这不会导致创建约束时出现错误。

最佳答案

请检查不同机器上数据库表的引擎。对于外键约束,支持 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/

相关文章:

mysql - 如何获取按月分组的总工作时间?

mysql - 调用-rc.d : could not determine current runlevel

mysql - 删除mysql中的字符串

python - SqlAlchemy - 按关系属性过滤

MySQL Workbench 忽略外键

mysql - 我在尝试添加外键时不断收到错误,我做错了什么?

mysql - Liquibase 错误 : No inverse to liquibase. Change.core.RawSQLChange 创建

Mysql 使用交叉引用选择行,但根据条件省略

mysql - SQLSTATE[23000] : Integrity constraint violation: 1452 Cannot add or update a child row on CONSTRAINT `fk_users_has_ratings_businesses1

sql-server - 主表更新时外键会自动更新吗?