java - 将数据库引擎从 MyIsam 更改为 innoDB 时出错

标签 java mysql database innodb myisam

我已将 Java Web 应用程序的数据库引擎从 MyIsam 更改为 innoDB。我正在使用 MySql 数据库。由于某种原因,我现在在创建通过批处理添加的数据库表时遇到错误。

我得到的错误是: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;

最佳答案

终于解决了这个问题,而且几乎没有时间来完成这个项目。

问题是 InnoDB 与 MyIsam 不同,不能使用 unsigned int 作为外键。

在我的示例中,我必须更改

`creatorId` INT UNSIGNED NOT NULL,

行:至

`creatorId` INT NOT NULL,

很简单,我只是不知道它是这样的。

关于java - 将数据库引擎从 MyIsam 更改为 innoDB 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6920157/

相关文章:

java - 模拟方法返回带有参数之一

mysql - 使用 Sequelize 事务记录对象数组

sql - 查询表的外键关系

sql - 与删除表关联的时间

sql - 我将如何多次选择 SQL 数据库中的同一列来显示不同的数据?

java - 由于 firebase sdk 依赖性,构建失败

java - 无法理解调试报告

Java Wrapper 相等性测试

PHP/SQL : SELECT 2 columns 3 times with different values

mysql - 将 2 个排序查询与 union 结合起来