Mysql 1822年;未能添加外键约束。缺少约束的索引

Mysql 1822年;未能添加外键约束。缺少约束的索引,mysql,Mysql,我有3张表:用户、照片、化身。化身是用户_2当前在滚动浏览用户_1的照片时看到的用户_1的照片。不同的用户看到每个用户的不同化身(取决于他们滚动了多少张照片) 当用户删除他的所有照片和头像时,显示给其他用户的照片和头像也会删除我做错了什么? (从服务器API获取的用户id,仅为方便起见) 但我犯了个错误 1822, "Failed to add the foreign key constraint. Missing index for constraint 'avatars_ibfk_2' in

我有3张表:用户、照片、化身。化身是用户_2当前在滚动浏览用户_1的照片时看到的用户_1的照片。不同的用户看到每个用户的不同化身(取决于他们滚动了多少张照片)

当用户删除他的所有照片和头像时,显示给其他用户的照片和头像也会删除我做错了什么? (从服务器API获取的用户id,仅为方便起见)

但我犯了个错误

1822, "Failed to add the foreign key constraint. Missing index for constraint 'avatars_ibfk_2' in the referenced table 'photos'")
版本

mysqlsh.exe --version
C:\Program Files\MySQL\MySQL Shell 8.0\bin\mysqlsh.exe   Ver 8.0.19 for Win64 on x86_64 - for MySQL 8.0.19 (MySQL Community Server (GPL))

请尝试以下查询,而不是第三个创建查询

ALTER TABLE photos ADD INDEX(photo);

CREATE TABLE IF NOT EXISTS avatars  (
  id INTEGER AUTO_INCREMENT PRIMARY KEY, 
    user_id INTEGER, 
    avatar VARCHAR(255),
    shower_id INTEGER, 
    FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE, 
    FOREIGN KEY (avatar) REFERENCES photos (photo) ON DELETE CASCADE,
    FOREIGN KEY (shower_id) REFERENCES users (user_id) ON DELETE CASCADE
);

您必须在应用外键之前添加索引。

您需要在照片上添加索引

cursor.execute("""CREATE TABLE IF NOT EXISTS photos(
id INTEGER AUTO_INCREMENT,
user_id INTEGER NOT NULL,
photo VARCHAR(255) NOT NULL,
KEY (id),
KEY (photo),
PRIMARY KEY (user_id, photo),
FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE)""")

请参见此处

复制了您的查询,但无论如何都会出现相同的错误,但在另一行(was 62,现在是63)检查它是否运行良好我认为这是pymysql驱动程序的一个错误。我将所有这些查询复制到MySQL控制台中,没有
游标。执行
即可,但从脚本来看,它不起作用。我使用import MySQL.connector。不幸的是,我无法编辑该表,因为数据库尚不存在。
cursor.execute("""CREATE TABLE IF NOT EXISTS photos(
id INTEGER AUTO_INCREMENT,
user_id INTEGER NOT NULL,
photo VARCHAR(255) NOT NULL,
KEY (id),
KEY (photo),
PRIMARY KEY (user_id, photo),
FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE)""")