테이블의 기본 키를 변경하려고하는 MySQL 관리자와 씨름 중입니다. 그것은 나를 foureign 키를 삭제하고 테이블의 이름을 변경하지 못하게합니다. 아무런 문제가 없습니다.MySQL 오류 번호 150 존재하지 않는 외래 키가 생성되지 않음
원래 테이블 t_order_items를 삭제했지만 t_order_items2의 이름을 t_order_items로 바꿀 수 없으며 150 오류가 발생합니다.
그래서 나는 문제가 생길 경우를 대비하여 create 문을 작성하고 관리자로부터 벗어날 것이라고 생각했습니다. 만들기 다음 stament가 실패하지만 테이블이 다른 이름 t_order_items라고하고 succededs 경우에만 :
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 STATUS의 결과를 선택하면,
삽입에 대한 올바른 시간이지만 삭제 된 이전 (원본) 테이블의 외래 키를 참조하며이 작성 스크립트에는 존재하지 않는 다음 외부 키 오류 보고서가 표시됩니다. 테이블 web2print/t_order_items의 외래 키 제약 조건에
는오류 : 참조에있는 것들과 일치하지 않는 테이블에 첫 번째 열로 열, 또는 데이터 유형을 포함 할 테이블에 인덱스가없는 테이블 또는 ON ... SET NULL 열 중 하나가 NOT NULL로 선언되었습니다. 제약 : UPDATE CASCADE ON DELETE CASCADE ON , CONSTRAINT "FK_t_order_items_1"FOREIGN KEY ("주문 ID") 참조 "t_orders"("주문 ID")
테이블에는 외부 키가 없습니다? 삭제되었습니다.
다음 작품
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;
하지만 내가 왜 그런 짓을했을까요? 피드백