1822无法添加外键约束。缺少约束的索引

时间:2020-06-10 18:54:36

标签: mysql

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

用户删除后,他向其他用户显示的所有照片和头像也将删除我该怎么做? (user_id是我从服务器API获取的,id只是为了方便起见)

cursor.execute("""CREATE TABLE IF NOT EXISTS users(
id int AUTO_INCREMENT PRIMARY KEY,
user_id INTEGER NOT NULL UNIQUE,
goal VARCHAR(255) DEFAULT NULL,
gender VARCHAR(255) DEFAULT NULL,
dob DATE DEFAULT NULL,
country VARCHAR(255) DEFAULT NULL,
city VARCHAR(255) DEFAULT NULL)""")

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

cursor.execute("""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)""")

但是我得到一个错误

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))

2 个答案:

答案 0 :(得分:1)

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

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
);

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

答案 1 :(得分:1)

您需要在照片上建立索引

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)""")

在此处查看https://dba.stackexchange.com/questions/268890/1822-failed-to-add-the-foreign-key-constraint-missing-index-for-constraint