반응형
MySQL에서 두 개의 테이블이있는 데이터베이스를 만들어야하지만 스크립트가 errno 150 (외래 키 문제)으로 실패합니다. 두 테이블에서 외래 키 필드가 동일하도록 다시 확인했는데 오류를 찾을 수 없습니다.
다음은 스크립트입니다.
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
DROP SCHEMA IF EXISTS `testdb`;
CREATE SCHEMA IF NOT EXISTS `testdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
USE `testdb`;
DROP TABLE IF EXISTS `testdb`.`table1` ;
CREATE TABLE IF NOT EXISTS `testdb`.`table1` (
`id` INT UNSIGNED NOT NULL ,
`field1` VARCHAR(50) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
DROP TABLE IF EXISTS `testdb`.`table2` ;
CREATE TABLE IF NOT EXISTS `testdb`.`table2` (
`id` INT NOT NULL AUTO_INCREMENT ,
`field1` VARCHAR(50) NULL ,
`date` DATE NULL ,
`cnt` INT NULL ,
PRIMARY KEY (`id`) ,
INDEX `FK_table2_table1` (`field1` ASC) ,
CONSTRAINT `FK_table2_table1`
FOREIGN KEY (`field1`)
REFERENCES `testdb`.`table1` (`field1` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
다른 버전의 MySQL을 사용하여 Windows 및 Ubuntu에서 시도했지만 작동하지 않았습니다.
어떤 아이디어?
해결 방법
table1.field1
에 정의 된 색인이 없습니다.
field1
에 FOREIGN KEY
제약 조건을 배치해야합니다.
이것으로 :
CREATE TABLE IF NOT EXISTS `testdb`.`table1` (
`id` INT UNSIGNED NOT NULL ,
`field1` VARCHAR(50) NULL ,
KEY ix_table1_field1 (field1),
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
그러면 모든 것이 예상대로 작동합니다.
참조 페이지 https://stackoverflow.com/questions/1749332
반응형
'MySql' 카테고리의 다른 글
MySQL PHP로 MySQL에 사용자가 이미 존재하는지 확인하는 방법 (0) | 2020.12.28 |
---|---|
MySQL PHP 오류 : 최대 함수 중첩 수준 '100'에 도달하여 중단 중 (0) | 2020.12.28 |
MySQL 암호 기능 (0) | 2020.12.28 |
MySQL 여러 레코드가있는 MySQL "SELECT LIMIT 1"은 맨 위에서 첫 번째 레코드를 선택합니까? (0) | 2020.12.28 |
MySQL MYSQL Inner Join with 2 ON Clauses (0) | 2020.12.28 |
댓글