2011-08-02 5 views
2

MyIsam에서 Java 웹 응용 프로그램의 DB 엔진을 innoDB로 변경했습니다. MySql DB를 사용하고 있습니다. 몇 가지 이유로 나는 배치를 통해 추가되는 db 테이블 생성시 오류가 발생합니다.MyIsam에서 innoDB로 DB 엔진을 변경할 때 오류가 발생했습니다.

오류는 java.sql.BatchUpdateException입니다.

두 DB 엔진 간의 변경이 의미하는 바는 무엇이며 어떻게 수정 했습니까?

편집

전체 스택 추적 :

java.sql.SQLException: Can't create table 'schedule.course2user' (errno: 150) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3562) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3494) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1960) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2114) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2690) 
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1648) 
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1567) 
    at database.DBCreator.execList(DBCreator.java:203) 
    at database.DBCreator.createDatabase(DBCreator.java:215) 
    at database.DBCreator.main(DBCreator.java:248) 

의 MyISAM과 InnoDB의 작업을하지만, 근무되지 않은 DB 명령을 :

CREATE TABLE IF NOT EXISTS `schedule`.`course` (
`id` INT NOT NULL AUTO_INCREMENT , 
`name` VARCHAR(45) NOT NULL UNIQUE, 
`description` BLOB , 
`credits` TINYINT(1) DEFAULT '0' , 
`capacity` INT DEFAULT '0' , 
`isRemoved` TINYINT(1) NULL DEFAULT '0' , 
`groupId` INT NULL DEFAULT '0' , 
`creatorId` INT UNSIGNED NOT NULL , 
PRIMARY KEY (`id`) , 
INDEX `fk_creator` (`creatorId` ASC) , 
CONSTRAINT `fk_creator` FOREIGN KEY (`creatorId`)REFERENCES `schedule`.`course` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION) 
ENGINE = innoDB DEFAULT CHARACTER SET = utf8; 
+0

전체 스택 추적을 제공해야합니다. –

+0

테이블 정의가 보이지 않으면 무엇이 잘못되었는지 알 수 없습니다. – OrangeDog

+0

@OrangeDog 업데이트했습니다. – Nayish

답변

3

마지막으로 해결했습니다.이 프로젝트를 진행할 시간이 거의 없습니다.

문제는 MyIsam과 달리 InnoDB는 부호없는 int를 외래 키로 사용할 수 없다는 것입니다. 난 그냥 이런 식으로 행동 모르는 아주 간단

`creatorId` INT NOT NULL, 

에 :

내 예제에서 나는

`creatorId` INT UNSIGNED NOT NULL, 

줄을 변경했다.

0

InnoDB와 데이터베이스 - 엔진의 경우 테이블 당 색인 필드가 필요합니다 (index 또는일 수 있음)또는 심지어 Foreign Key).

따라서 엔진에서 사용할 수있는 정의 된 색인 (또는 키)이 없다는 것이 문제입니다. 작성중인 모든 테이블에 대해 Primary Key을 선언해야합니다.

MyISAM - 엔진에는이 기능이 필요하지 않습니다.

+0

innodb와 myisam에 여러 개의 열 pk를 가질 수 있습니다 –

+0

그래서이 테이블에 대한 기본 키 (이미 여러 개)가 있으므로이 대답은 도움이되지 않습니다 – Nayish

관련 문제