문제

MySQL 관리자가 테이블의 기본 키를 변경하려고 노력했습니다. 그것은 제가 Foureign 키를 삭제하고 테이블의 이름을 바꾸지 못하게 할 수 없었습니다.

이제 원래 테이블 t_order_items를 삭제했지만 t_order_items2를 t_order_items로 바꿀 수는 없으므로 150 오류로 실패합니다.

그래서 나는 문제가 될 경우를 대비하여 제작 진술을 만들고 관리자에게서 벗어날 것이라고 생각했습니다. 다음 생성 Stament는 실패하지만 테이블을 t_order_items라고 불리는 경우에만 다른 이름을 불렀습니다.

DROP TABLE IF EXISTS `web2print`.`t_order_items`;
CREATE TABLE  `web2print`.`t_order_items` (
  `orderID` bigint(20) NOT NULL,
  `productID` bigint(20) NOT NULL,
  `itemprice` decimal(10,2) NOT NULL,
  `itemvat` decimal(2,2) NOT NULL DEFAULT '0.15',
  `quantity` int(10) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `stockCode` varchar(45) DEFAULT NULL,
  `proofpath` varchar(300) DEFAULT NULL,
  `consignmentID` bigint(20) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `order_itemID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`order_itemID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Show Engine InnoDB 상태의 출력을 확인하면;

다음과 같은 외국 키 오류 보고서가 표시되지만 삽입에 맞는 시간이지만 삭제 된 기존 (원본) 테이블의 외래 키를 참조 하고이 작성 스크립트에는 존재하지 않습니다.

테이블의 외국 키 제약 조건의 오류 web2print/t_order_items : 테이블에 열을 첫 번째 열로 포함하는 색인이 없거나 테이블의 데이터 유형이 참조 테이블 또는 ON 중 하나와 일치하지 않습니다. .. 설정 널 열이 null로 선언됩니다. 제약 조건 :, 제약 조건 "FK_T_ORDER_ITEMS_1"외부 키 ( "ORDERID") 참조 "T_ORDERS"( "ORDERID")는 업데이트 캐스케이드에서 삭제 된 캐스케이드에 있습니다.

테이블에 외래 키가 없습니까? 그들은 삭제되었습니다.

다음 작품

 SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `web2print`.`t_order_items`;
CREATE TABLE  `web2print`.`t_order_items` (
  `orderID` bigint(20) NOT NULL,
  `productID` bigint(20) NOT NULL,
  `itemprice` decimal(10,2) NOT NULL,
  `itemvat` decimal(2,2) NOT NULL DEFAULT '0.15',
  `quantity` int(10) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `stockCode` varchar(45) DEFAULT NULL,
  `proofpath` varchar(300) DEFAULT NULL,
  `consignmentID` bigint(20) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `order_itemID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`order_itemID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;

하지만 왜 그렇게해야 했습니까?

피드백에 감사드립니다

도움이 되었습니까?

해결책

당신은 t_order_items와 t_orders 사이에 제약을 얻으려고했습니다. 테이블을 떨어 뜨리기 전에 먼저 비활성화해야했습니다. 이것은 당신과 당신의 데이터를 보호하기 때문에 좋습니다. 외래 키는 삭제되었을 수 있지만 제약 조건은 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top