将外键添加到现有表中

我想给一个名为“katalog”的表添加一个外键

更改表katalog
添加约束“fk_katalog_sprache”
外键(`Sprache`)
引用'Sprache'('ID`)
关于删除集NULL
更新集为空;

当我尝试执行此操作时,会收到以下错误消息:

错误代码:1005。无法创建表“mytable.#sql-7fb1_7d3a”(错误号:150)

INNODB状态中出现错误:

120405 14:02:57表的外键约束出错
mytable.#sql-7fb1_7d3a:

外键(`Sprache`)
引用'Sprache'('ID`)
关于删除集NULL
更新集为空时:
无法解析靠近以下位置的表名:
(`ID`)
关于删除集NULL
更新集为空时

当我使用此查询时,它可以工作,但“on delete”操作错误:

更改表'katalog'
添加外键(`Sprache`)引用`Sprache`(`ID`)

两个表都是InnoDB,两个字段都是“INT(11)notnull”。我使用的是MySQL 5.1.61。尝试在MacBookPro上使用MySQL Workbench(最新版本)启动此ALTER查询

表Create语句:

创建表'katalog'(
`ID`int(11)无符号非空自动增量,
`Name`varchar(50)COLLATE utf8\u unicode\u ci非空,
`Anzahlsiten`int(4)无符号非空,
`Sprache`int(11)不为空,
主键(`ID`),
唯一键'katalogname_uq'('Name`)
)ENGINE=InnoDB AUTO\u INCREMENT=12默认字符集=utf8 COLLATE=utf8\U unicode\U ci行\u格式=动态$$
创建表“sprache”(
`ID`int(11)非空自动增量,
`Bezeichung`varchar(45)不为空,
主键(`ID`),
唯一键'bezeichung_UNIQUE'('bezeichung'),
键'ix_sprache_id'('id`)
)ENGINE=InnoDB AUTO_INCREMENT=3默认字符集=utf8

要向现有表(用户)添加外键(grade_id),请执行以下步骤:

ALTER TABLE用户添加grade\u id SMALLINT无符号非空默认值0;
ALTER TABLE users添加约束fk_grade_id外键(grade_id)引用grades(id);

发表评论