0

次の表があります。

Create Table if not exists Categories(
    category_id int (10) primary key NOT NULL AUTO_INCREMENT,
    category_name varchar (20) NOT NULL,
    parent_category_id int (10) NOT NULL,   
    FOREIGN KEY (parent_category_id) REFERENCES Categories(category_id) ON DELETE CASCADE)

テーブルには、サイトにあるすべてのカテゴリが保持されています。各カテゴリには親カテゴリがあります (たとえば、「コンピューター」は「プログラミング」の親カテゴリです)。親カテゴリを持たない上位カテゴリがいくつかあります =>親カテゴリ ID =0

私の質問は、上位カテゴリのデータを挿入する方法です。私がやろうとしているとき:

INSERT INTO  `databaseproject`.`categories` (`category_id` ,`category_name` ,`parent_category_id`)
VALUES (NULL ,  'computers',  '0')

エラーが発生します:

#1452 - Cannot add or update a child row: a foreign key constraint fails (`databaseproject`.`categories`, CONSTRAINT `categories_ibfk_1` 
FOREIGN KEY (`parent_category_id`) REFERENCES `categories` (`category_id`) ON DELETE CASCADE) 

これらのカテゴリを挿入するにはどうすればよいですか?

4

2 に答える 2

2

parent_category_id を null 可能にし、親カテゴリの parent_category_id を null にするか、ID 0 のルート行を追加します。

于 2013-05-03T18:31:29.917 に答える
0

2 つの問題があります。まず、category_id は auto_increment フィールドです。つまり、新しい行を挿入するとデータベースが値を作成するので、値を指定する必要はありません。null に設定することはできません。これは、自動インクリメント id フィールドに絶対に必要なものです。挿入を次のように変更するだけです。

INSERT INTO  'databaseproject'.'categories' ('category_name' ,'parent_category_id')
VALUES ('computers',  '0')

しかし、あなたにはまだ別の問題があります。作成した制約により、parent_category_id は、category テーブルの有効なレコードを参照する必要があります。この問題を解決するには、フィールドを null にできるようにし (parent_category_id を作成するときに「NOT NULL」を削除します)、0 の代わりに null を使用してこれが最上位のレコードであることを示します。

于 2013-05-03T18:50:32.587 に答える