gpt4 book ai didi

MYSQL 和 Symfony 创建 ManyToMany 关联时出现 errno 150

转载 作者:行者123 更新时间:2023-11-30 00:39:02 24 4
gpt4 key购买 nike

我在使用 symfony 2 控制台自动创建数据库表时遇到问题。当我想更改表时,我在 MySQL 中收到 errno 150。

CREATE TABLE roles (
role_id SMALLINT AUTO_INCREMENT NOT NULL,
role_name VARCHAR(30) NOT NULL,
role_role VARCHAR(20) NOT NULL,
UNIQUE INDEX UNIQ_649AC6AFE9D6F8FE (role_role),
PRIMARY KEY (role_id)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB;

CREATE TABLE persons (
person_id SMALLINT AUTO_INCREMENT NOT NULL,
PRIMARY KEY (person_id)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB;

CREATE TABLE persons_roles (
person_id SMALLINT NOT NULL,
role_id INT NOT NULL,
INDEX IDX_EA478DBA217BBB47 (person_id),
INDEX IDX_EA478DBAD60322AC (role_id),
PRIMARY KEY (person_id , role_id)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB;

这是更改命令。

ALTER TABLE persons_roles 
ADD CONSTRAINT FK_EA478DBA217BBB47
FOREIGN KEY (person_id) REFERENCES persons (id) ON DELETE CASCADE;

ALTER TABLE persons_roles
ADD CONSTRAINT FK_EA478DBAD60322AC
FOREIGN KEY (role_id) REFERENCES roles (id) ON DELETE CASCADE;

有人能指出我的错误吗?

最佳答案

对于第一个改变

您在 persons 表中没有列 id,该列是 person_id,因此正确的 ALTER 是作为

ALTER TABLE persons_roles 
ADD CONSTRAINT FK_EA478DBA217BBB47
FOREIGN KEY (person_id) REFERENCES persons (person_id) ON DELETE CASCADE;

第二次改变

问题

  1. roles 表中没有 id 列,该列为 role_id
  2. 列类型也不相同 roles.role_idpersons_roles.role_id 不同

解决方案

首先更改列类型,然后引用正确的列。

ALTER TABLE roles MODIFY role_id INT(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE persons_roles
ADD CONSTRAINT FK_EA478DBAD60322AC
FOREIGN KEY (role_id) REFERENCES roles (role_id) ON DELETE CASCADE;

关于MYSQL 和 Symfony 创建 ManyToMany 关联时出现 errno 150,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21932858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com