#mysql #sql #database-design #foreign-keys #create-table
#mysql #sql #база данных-дизайн #внешние ключи #create-table
Вопрос:
Это две таблицы, которые я создал, но я получаю ошибку в таблице issues
:
Я искал в Интернете, но не смог найти никакого решения. Не могли бы вы, пожалуйста, помочь мне в этом.
CREATE TABLE Issues
(
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100),
description TEXT,
type VARCHAR(50),
priority VARCHAR(50),
status VARCHAR(50),
assigned_to INT,
created_by INT,
created DATETIME,
updated DATETIME,
FOREIGN KEY (assigned_to, created_by) REFERENCES Users(id, id)
) ENGINE=InnoDB;
CREATE TABLE Users
(
id INT AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30),
lastname VARCHAR(30),
password VARCHAR(30),
email VARCHAR(30),
date_joined DATETIME
) ENGINE=InnoDB;
Комментарии:
1. Скорее всего, вам просто нужно создать
Users
first — beforeIssues
— чтобы можно было установить ограничение FK и ссылаться на существующую таблицу….2. @marc_s, я тоже пробовал это … но все равно я получаю сообщение об ошибке: ОШИБКА 1822 (HY000) в строке 13: не удалось добавить ограничение внешнего ключа. Отсутствует индекс для ограничения ‘Issues_ibfk_1’ в таблице ссылок ‘Users’
3. Вы действительно хотите создать составной внешний ключ?? В … нет соответствующего составного первичного ключа
Users
. или вы хотели создать FK дляassigned_to
toUsers.id
и другое ограничение FK дляcreated_by
— сноваUsers.id
— отдельно? ——> см. Ответ @GMB — он, должно быть, прочитал мои мысли и вставил их в ответ; -)
Ответ №1:
Вам нужны два внешних ключа, а не один — и вам нужно создать родительскую таблицу перед дочерней таблицей:
-- parent table
create table users (
id int auto_increment primary key,
firstname varchar(30),
lastname varchar(30),
password varchar(30),
email varchar(30),
date_joined datetime
) engine=innodb;
-- child table
create table issues (
id int auto_increment primary key,
title varchar(100),
description text,
type varchar(50),
priority varchar(50),
status varchar(50),
assigned_to int,
created_by int,
created datetime,
updated datetime,
foreign key (assigned_to) references users(id), -- first FK
foreign key (created_by) references users(id) -- second FK
) engine=innodb;
Комментарии:
1. Чтобы уточнить: чтобы создать внешний ключ в InnoDB, вам нужно ссылаться на индекс в том же порядке. У вас нет индекса
(id, id)
, у вас один индексid
, поэтому вам нужно использовать 2 отдельных FK для ссылки на это. Смотрите документ MySQL по FKs .