mysql 在 ALTER TABLE 约束 : Can't create table (errno: 150) 上失败

标签 mysql sql

我有以下 SQL:

CREATE TABLE face_group (id BIGINT AUTO_INCREMENT, name VARCHAR(100), description     VARCHAR(200), pivotxpos FLOAT(18, 2) NOT NULL, pivotypos FLOAT(18, 2) NOT NULL, created_at        DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY(id)) ENGINE = INNODB;
CREATE TABLE face_image (id bigint NOT NULL, imageurl VARCHAR(200) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL) ENGINE = INNODB;
CREATE TABLE face_tag (id bigint NOT NULL, name VARCHAR(100), tagtype VARCHAR(100), created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL) ENGINE = INNODB;
CREATE TABLE grouped_feature (id BIGINT AUTO_INCREMENT, name VARCHAR(100) NOT NULL, feature_id bigint NOT NULL, face_group_id bigint NOT NULL, pivotxposoverride FLOAT(18, 2) NOT   NULL, pivotyposoverride FLOAT(18, 2) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX face_group_id_idx (face_group_id), INDEX feature_id_idx            (feature_id), PRIMARY KEY(id)) ENGINE = INNODB;
CREATE TABLE tagged_face (id bigint NOT NULL, face_image_id bigint NOT NULL, face_tag_id bigint NOT NULL, tag_value VARCHAR(100), created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX face_image_id_idx (face_image_id), INDEX face_tag_id_idx (face_tag_id)) ENGINE = INNODB;
CREATE TABLE tweaked_curve (id BIGINT AUTO_INCREMENT, tweaked_feature_id bigint NOT NULL, curve_id bigint NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL,     INDEX tweaked_feature_id_idx (tweaked_feature_id), INDEX curve_id_idx (curve_id), PRIMARY KEY(id)) ENGINE = INNODB;
CREATE TABLE tweaked_feature (id BIGINT AUTO_INCREMENT, face_group_id bigint NOT NULL, feature_id bigint NOT NULL, face_image_id bigint NOT NULL, pivotxpos FLOAT(18, 2) NOT NULL,  pivotypos FLOAT(18, 2) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX face_group_id_idx (face_group_id), INDEX feature_id_idx (feature_id), INDEX      face_image_id_idx (face_image_id), PRIMARY KEY(id)) ENGINE = INNODB;
CREATE TABLE tweaked_point (id BIGINT AUTO_INCREMENT, tweaked_curve_id bigint NOT NULL, point_id bigint NOT NULL, xposoverride FLOAT(18, 2) NOT NULL, yposoverride FLOAT(18, 2) NOT NULL, user_tweaked TINYINT(1) DEFAULT '0' NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX tweaked_curve_id_idx (tweaked_curve_id), INDEX point_id_idx   (point_id), PRIMARY KEY(id)) ENGINE = INNODB;
ALTER TABLE grouped_feature ADD CONSTRAINT grouped_feature_feature_id_feature_id FOREIGN KEY (feature_id) REFERENCES feature(id) ON DELETE CASCADE;
ALTER TABLE grouped_feature ADD CONSTRAINT grouped_feature_face_group_id_face_group_id FOREIGN KEY (face_group_id) REFERENCES face_group(id) ON DELETE CASCADE;
ALTER TABLE tagged_face ADD CONSTRAINT tagged_face_face_tag_id_face_tag_id FOREIGN KEY (face_tag_id) REFERENCES face_tag(id) ON DELETE CASCADE;
ALTER TABLE tagged_face ADD CONSTRAINT tagged_face_face_image_id_face_image_id FOREIGN KEY (face_image_id) REFERENCES face_image(id) ON DELETE CASCADE;
ALTER TABLE tweaked_curve ADD CONSTRAINT tweaked_curve_tweaked_feature_id_tweaked_feature_id FOREIGN KEY (tweaked_feature_id) REFERENCES tweaked_feature(id) ON DELETE CASCADE;
ALTER TABLE tweaked_curve ADD CONSTRAINT tweaked_curve_curve_id_curve_id FOREIGN KEY (curve_id) REFERENCES curve(id) ON DELETE CASCADE;
ALTER TABLE tweaked_feature ADD CONSTRAINT tweaked_feature_feature_id_feature_id FOREIGN KEY (feature_id) REFERENCES feature(id) ON DELETE CASCADE;
ALTER TABLE tweaked_feature ADD CONSTRAINT tweaked_feature_face_image_id_face_image_id FOREIGN KEY (face_image_id) REFERENCES face_image(id) ON DELETE CASCADE;
ALTER TABLE tweaked_feature ADD CONSTRAINT tweaked_feature_face_group_id_face_group_id FOREIGN KEY (face_group_id) REFERENCES face_group(id) ON DELETE CASCADE;
ALTER TABLE tweaked_point ADD CONSTRAINT tweaked_point_tweaked_curve_id_tweaked_curve_id FOREIGN KEY (tweaked_curve_id) REFERENCES tweaked_curve(id) ON DELETE CASCADE;
ALTER TABLE tweaked_point ADD CONSTRAINT tweaked_point_point_id_point_id FOREIGN KEY (point_id) REFERENCES point(id) ON DELETE CASCADE;

并且 ALTER TABLE tagged_face 命令失败并出现奇怪的“无法创建表错误 150”错误。

我查看了有关此问题的其他帖子,但看不出我做错了什么(外键引用相同类型且唯一的列)。有人有什么想法吗?

谢谢

最佳答案

您的face_image 表没有索引。需要一个索引来监管 FOREIGN KEY 约束。

face_image 表上添加一个索引,您应该被设置为 ...

关于mysql 在 ALTER TABLE 约束 : Can't create table (errno: 150) 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16949919/

相关文章:

php - 将 php 数组转换为 SQL 数组

c# - 如何在 WPF 中刷新数据网格

java - 如何将 SQL 表创建转换为 JPA hibernate 自动创建

mysql - 查询以选择所有最小值中的最大值

sql - 是否可以在 psql 的查询或事务中列出所有受影响的行?

php - 将月份分成 4 份并检索每天的平均值

sql - 在dplyr中用转换后的数据替换SQL数据库表

mysql - 连接数据库中的两个项目 - 最佳方法?

sql - 如何向具有自增主键的表中插入值?

sql - 我只是不明白为什么这个查询不拉结果