对数据库中的行重新排序

问题描述:

我需要更改数据库表中行的顺序。 我的表格有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

您需要更改表你的外键。 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