2011-08-02 7 views
2

私のJava WebアプリケーションのDBエンジンをMyIsamからinnoDBに変更しました。私はMySql DBを使用しています。何らかの理由で、私は今バッチで追加された私のdbテーブルの作成にエラーを取得します。DBエンジンをMyIsamからinnoDBに変更するときのエラー

エラーはjava.sql.BatchUpdateExceptionです。

これらの2つのDBエンジンを変更した場合の影響は何ですか?また、私が犯したものを修正するにはどうすればよいですか?

EDIT

完全なスタックトレース:

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はunsigned intを外部キーとして使用できないということです。

は私の例では、私は

`creatorId` INT UNSIGNED NOT NULL, 

行を変更する必要がありました:

`creatorId` INT NOT NULL, 

かなり簡単に私はちょうどそれがこのように行動した知りませんでした。

0

InnoDBでデータベース - エンジンはテーブルごとにインデックスフィールドを必要とします(indexまたはPrimary KeyまたはさらにForeign Key)。

したがって、エンジンで使用できる定義済みのインデックス(またはキー)がないことが問題です。作成するテーブルごとにPrimary Keyを宣言する必要があります。

MyISAM - エンジンではこれは必要ありません。

+0

innodbとmyisamに複数のカラムpkを置くことができます –

+0

私は既にこれらのテーブルに対してプライマリキー(時には複数)を持っているので、この回答は役に立ちません。 – Nayish

関連する問題