0

私のコードは次のとおりです。

 CREATE DATABASE IF NOT EXISTS courses;

 USE 'courses'

 CREATE TABLE IF NOT EXISTS teachers(
      id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
      name VARCHAR(50) NOT NULL COMMENT 'name',
      addr VARCHAR(255) NOT NULL COMMENT 'addr',
      phone INT(20) NOT NULL ,
      CONSTRAINT pkTeachers PRIMARY KEY (id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;

 CREATE TABLE IF NOT EXISTS courses(
       id INT AUTO_INCREMENT NOT NULL,
       title VARCHAR(200) NOT NULL COMMENT 'title',
       length INT NOT NULL COMMENT 'length',
       cathegory INT NOT NULL COMMENT 'cathegory',
       description TEXT DEFAULT '' COMMENT 'description',
       previous INT NOT NULL COMMENT 'previous',
       CONSTRAINT pkCourses PRIMARY KEY (id),
       INDEX ixCathegory (cathegory),
       INDEX ixprevious (previous),
       CONSTRAINT fkPrevious FOREIGN KEY (previous) REFERENCES courses (id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;

「コース」テーブルにデータを挿入したい場合、エラーが発生します:

 mysql> INSERT INTO courses.courses (title, length, cathegory,
 description) VALUES ('title1', 213, 1, 'description1');

 ERROR 1452 (23000): Cannot add or update a child row: a foreign key
 constraint fails (`courses`.`courses`, CONSTRAINT `fkPrevious` FOREIGN
 KEY (`previous`) REFERENCES `courses` (`id`)) mysql    

しかし、phpmyadmin からデータを挿入すると、すべて正常に実行されました。このエラーについて教えてください。PS

4

1 に答える 1

0

テーブル構造によると、すべてのコースに対応するpreviousコースが必要です。

previous列を作成してみてくださいINT NULL DEFAULT NULL。これにより、「前のコースなし」が可能になり、これらのアイテムのエラーを回避できます。

于 2013-09-14T14:00:45.807 に答える