2017-02-10 13 views
1

データベーステーブルの行の順序を変更する必要があります。 テーブルには4列と7行があります。 Iどのようにデータベース内の行の並べ替え

Cannot delete or update a parent row: a foreign key constraint fails (`database_name`.`oc_t_item_custom_attr_categories`, CONSTRAINT `oc_t_item_custom_attr_categories_ibfk_1` FOREIGN KEY (`fk_i_group_id`) REFERENCES `oc_t_item_custom_attr_groups` (`pk_i_id`)) 

...私はpk_i_id値(番号)を変更したAdminerでは、これらの行

pk_i_id int(10) unsigned Auto Increment 
s_name    varchar(255) NULL  
s_heading   varchar(255) NULL  
s_order_type  varchar(10) NULL 

を並べ替えるために何かを必要とする、私はこのエラーを取得していますあなたは知っていますかそれを変更 ?

編集

oc_t_item_custom_attr_categoriesあなたがテーブルの上にあなたの外部キーを変更する必要が

fk_i_group_id  int(10) unsigned  
fk_i_category_id int(10) unsigned  

インデックス

PRIMARY fk_i_group_id, fk_i_category_id 
INDEX fk_i_category_id 

foreginキー

fk_i_group_id  oc_t_item_custom_attr_groups_2(pk_i_id) RESTRICT RESTRICT  
fk_i_category_id oc_t_category(pk_i_id)     RESTRICT RESTRICT  
+0

適切なDBMSで質問にタグを付けてください。ほとんどのDBMSは、外部キーのON UPDATE CASCADEオプションをサポートして、PKの変更を参照テーブルに伝播します。 – Serg

答えて

2

ありがとう。 oc_t_item_custom_attr_categoriesを参照し、それが参照する列と共に更新するようにします。

​​

MariaDBは、テーブルの作成後に外部キーを追加サポートしていませいるように見えるので、これはそれがテーブルの記述が正しいと仮定すると、あなたのために働くべきかである:それは例のデータにどのように動作する

RENAME TABLE oc_t_item_custom_attr_categories TO oc_t_item_custom_attr_categories_2; 

CREATE TABLE oc_t_item_custom_attr_categories (
    fk_i_group_id int(10) unsigned, 
    fk_i_category_id int(10) unsigned, 
    PRIMARY KEY(fk_i_group_id, fk_i_category_id), 
    INDEX (fk_i_category_id), 
    CONSTRAINT `oc_t_item_custom_attr_categories_ibfk_1` FOREIGN KEY (fk_i_group_id) 
     REFERENCES oc_t_item_custom_attr_groups (pk_i_id) 
     ON UPDATE CASCADE, 
    CONSTRAINT `oc_t_item_custom_attr_categories_ibfk_2` FOREIGN KEY (fk_i_category_id) 
     REFERENCES oc_t_category (pk_i_id) 
) ENGINE = XtraDB; --change engine to what you are using 

INSERT INTO oc_t_item_custom_attr_categories SELECT * FROM oc_t_item_custom_attr_categories_2; 

MySQLデータベース:http://rextester.com/ZAKR50399

+0

私はあなたのクエリを実行しようとしましたが、このエラーがあります>> 1行目の 'CONSTRAINT oc_t_item_custom_attr_categories_ibfk_1'の近くに構文エラーがあります – JZK

+0

Sergが以前に尋ねたように、使用しているDBMSを教えてください適切な構文を見つけてください。しかし、本質的には制約を変更して、ON UPDATEをCASCADEにする必要があります。つまり、参照されたテーブルが変更された場合に外部キーを保持する列が変更されます。 一時的な制約を削除し、両方のテーブルで必要な更新を行い、その後で制約を再作成することもできます。 –

+0

私はMariaDBを使用していて、Adminer経由でそれを調べています。私はDBMSの下で想像すべきものがわからないので、具体的に質問してください。ありがとう(私はデータベースの初心者です) – JZK

関連する問題