source

데이터베이스의 행 순서 변경

factcode 2023. 1. 29. 20:16
반응형

데이터베이스의 행 순서 변경

데이터베이스 테이블의 행 순서를 변경해야 합니다.제 테이블은 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

관리자에서 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_카테고리

 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 

초기 키

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    

테이블의 외부 키를 변경해야 합니다.database_name.oc_t_item_custom_attr_categories참조하는 열과 함께 업데이트되도록 합니다.

ALTER TABLE database_name.oc_t_item_custom_attr_categories DROP CONSTRAINT oc_t_item_custom_attr_categories_ibfk_1;
ALTER TABLE database_name.oc_t_item_custom_attr_categories
  ADD 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;

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

언급URL : https://stackoverflow.com/questions/42153793/reorder-rows-in-database

반응형