Я создал таблицы в MYSQL следующим образом
Таблица авторов
CREATE TABLE 'author' (
'AuthorId' varchar(25) NOT NULL,
'AuthorName' varchar(50) NOT NULL,
PRIMARY KEY ('AuthorId')
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Таблица книг
CREATE TABLE 'books' (
'DocId' int(11) NOT NULL,
'ISBN' varchar(13) NOT NULL,
PRIMARY KEY ('DocId'),
KEY 'DocId' ('DocId'),
CONSTRAINT 'books_ibfk_1' FOREIGN KEY ('DocId') REFERENCES 'document'
('DocId')
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Таблица документов
CREATE TABLE 'document' (
'DocId' int(11) NOT NULL,
'Title' varchar(50) NOT NULL,
'PublishDate' date DEFAULT NULL,
'AuthorId' varchar(10) DEFAULT NULL,
'DocType' varchar(10) DEFAULT NULL,
PRIMARY KEY ('DocId'),
KEY 'AuthorId' ('AuthorId'),
CONSTRAINT 'document_ibfk_3' FOREIGN KEY ('AuthorId') REFERENCES 'author'
('AuthorId')
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Я создал сервер для своего PHP-сайта на XAMPP и использую mysql, но когда я пытаюсь вставить значения в таблицу Document, я получаю
error while inserting the recordsCannot add or update a child row: a foreign
key constraint fails ('librarydb'.'document', CONSTRAINT 'document_ibfk_3'
FOREIGN KEY ('AuthorId') REFERENCES 'author' ('AuthorId'))
Как решить эту проблему?
Ваши связанные поля author.AuthorId
и document.AuthorId
не определены одинаково.
Из документов:
Соответствующие столбцы внешнего ключа и ссылочного ключа должны иметь похожие типы данных. Размер и знак целочисленных типов должны быть одинаковыми. Длина типов строк не обязательно должна быть одинаковой.
Поэтому сделайте их как varchar (10) NOT NULL - или что вам нужно.