2017-12-10 4 views
0

エラーrecordsCannotを追加したり、子行を更新挿入しながら:私は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 

私はXAMPPの私のPHPのウェブサイトのためのサーバーを作ったとMySQLを使用していますが、私はドキュメントテーブルに値を挿入しようとすると、私はこの問題を解決するにはどうすればよい

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

を取得しますか?

+0

'author.AuthorId'と' document.AuthorId'の間の長さ/ NULLorNOT NULLの不一致 – Jeff

+0

そしてあなたがそれをしている間: 'AuthorId'が実際に文字列である必要があるかどうか尋ねてください。 – Jeff

答えて

1

リンクされたフィールドauthor.AuthorIddocument.AuthorIdは同じ方法で定義されていません。
From the docs:外部キーと参照キーと同様のデータ型を持っている必要があります で列を対応する

。整数型のサイズと符号は同じでなければなりません 。文字列型の長さは同じである必要はありません。

したがって、それらをvarchar(10)NOT NULLにするか、必要なものを作成します。

関連する問題