对数据库中的行重新排序
我需要更改数据库表中行的顺序。 我的表格有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
您需要更改表你的外键。 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
我已经尝试执行您的查询,我有这个错误>>第1行'CONSTRAINT oc_t_item_custom_attr_categories_ibfk_1'附近的语法错误 – JZK
您必须像Serg早些时候问的那样,告诉我们您正在使用的DBMS,以便我们可以找出正确的语法。但实质上你需要改变你的约束,以便ON UPDATE它将CASCADE,这意味着如果引用表更改,它将更改保存外键的列。 您也可以暂时放弃约束,在两个表上进行必要的更新,然后重新创建约束。 –
我正在使用MariaDB并通过Adminer查看它。请更具体地询问,因为我不确定我应该在DBMS下想象什么。谢谢(我是数据库中的新手) – JZK
用正确的DBMS标记问题。大多数DBMS在外键中支持ON UPDATE CASCADE选项以将PK的更改传播到引用表。 – Serg