在Mybatis迁移工具中的一个事务中运行多个mysql语句
||
我正在使用Mybatis迁移工具来维护我们数据库的架构,但是存在以下问题。
当前,如果我们在迁移中使用多个语句,它们每个都在单独的事务中运行。因此,如果我要更改2个表(或运行多个语句)作为功能的一部分,并且其中之一中断,则首先手动运行的任何表都必须手动还原。但是,只有在所有语句成功完成后,mybatis迁移才会在变更日志表中标记为已完成。
这确实令人沮丧,因为如果整个迁移不是自主的,则无法保持恒定的db状态。
设定值
这是我们的测试数据库的mybatis mygration的(相关)设置。
## JDBC connection properties.
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/gamealert_test?allowMultiQueries=true
username=gamealert
password=********
# If set to true, each statement is isolated
# in its own transaction. Otherwise the entire
# script is executed in one transaction.
auto_commit=false
# This controls how statements are delimited.
# By default statements are delimited by an
# end of line semicolon. Some databases may
# (e.g. MS SQL Server) may require a full line
# delimiter such as GO.
delimiter=;
full_line_delimiter=false
# This ignores the line delimiters and
# simply sends the entire script at once.
# Use with JDBC drivers that can accept large
# blocks of delimited text at once.
send_full_script=true
我添加了auto_commit = false,send_full_script = true和allowMultiQueries = true(以url表示),以试图将整个迁移过程保持在一个事务中。
是否有任何我需要使用的mysql url参数才能允许此操作?这有可能吗?似乎应该如此。也许我们只需要为每个语句创建一个迁移,但这似乎过多。
例
这是进一步说明的例子
迁移示例20110318154857_fix_daily_sales:
--// fix daily_sales naming
-- Migration SQL that makes the change goes here.
ALTER TABLE `daily_sales` CHANGE COLUMN `storeId` `store_id` INT(10) UNSIGNED NOT NULL;
b0rked;
--//@UNDO
-- SQL to undo the change goes here.
... undo sql here ....
如果我运行向上迁移,则由于出现b0rked;
行而导致失败。
迁移状态显示迁移正按预期进行。
20110318130407 2011-03-18 17:06:24 create changelog
20110318144341 2011-03-18 17:06:30 fix schedule naming
20110318154857 ...pending... fix daily sales naming
但是我的数据库已应用更改!不好!
describe daily_sales;
+-----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| store_id | int(10) unsigned | NO | PRI | NULL | |
| sale_date | date | NO | PRI | NULL | |
| type_id | int(10) unsigned | NO | PRI | NULL | |
| tokens | int(10) unsigned | NO | | 0 | |
| dollars | double | NO | | 0 | |
+-----------+------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
有什么办法可以防止这种情况?我是否应该将每个语句都迁移并继续前进?那就是我现在的位置。
提前致谢。
没有找到相关结果
已邀请:
1 个回复
犀寺扦