2017-02-10 33 views
1

我需要更改數據庫表中行的順序。 我的表格有4列和7行。我需要重新排列這些行對數據庫中的行重新排序

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

在Adminer,當我改變pk_i_id金額(數量)別的東西,我得到這個錯誤...

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

你知道如何更改 ?謝謝

編輯

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