2011-08-02 67 views
2

我已将My webapplication的数据库引擎从MyIsam更改为innoDB。我正在使用MySql DB。出于某种原因,我现在在创建通过批处理添加的数据库表时出现错误。将数据库引擎从MyIsam更改为innoDB时出错

我得到的错误是:java.sql.BatchUpdateException

在这两个数据库引擎之间进行更改有什么影响,以及如何纠正我所错误的内容?

编辑

完整的堆栈跟踪:

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) 

不与InnoDB的工作,但工作于MyISAM数据库命令:

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数据库 - 引擎需要每个表的索引字段(可以是indexPrimary Key或甚至Foreign Key)。

所以,你的问题接缝是引擎可以使用的没有定义的索引(或键)。你应该为你创建的每个表声明一个Primary Key

MyISAM -engine不需要这个。

+0

您可以在innodb以及myisam中有多个列pk –

+0

所以这个答案没有帮助,因为这些表已经有一个主键(有时是几个) – Nayish

相关问题