我需要重命名我的一个表和这个表中的一列。
我已经用knex迁移完成了下一步:
.alterTable('tableToRename', table => {
table.dropForeign('id_reference1');
table.dropForeign('id_reference2');
})
.alterTable('relatedTable1', table => {
table.dropForeign('tableToRename_id_col');
})
.renameTable('tableToRename', 'newName')
.alterTable('newName', table => {
table.renameColumn('tableToRename_id_col', 'tableToRename_new_id_col');
})
.alterTable('relatedTable1', table => {
table.renameColumn('tableToRename_id_col', 'tableToRename_new_id_col');
table.foreign('tableToRename_new_id_col').references('newName.tableToRename_new_id_col');
})
.alterTable('newName', table => {
table.foreign('id_reference1').references('table3');
table.foreign('id_reference2').references('table4');
})
因此,现在当我尝试向newname表添加新记录时,会出现下一个错误:
错误(1366)hy000:第1行“tabletorename\u new\u id\u col”列的“不正确的整数值”
如何以正确的方式重命名id为的自动整数列?
服务器响应,出现下一个错误:代码:“er\u no\u default\u for\u field”,错误号:1364,sqlmessage:“field'tabletorename\u new\u id\u col\”没有默认值,sqlstate:“hy000”,索引:0,
升级。之前,我创建了一个表,我想将其重命名为:
.createTableIfNotExists('tableToRename', tab => {
t.charset('utf8mb4');
table.bigincrements('tableToRename_id_col')
.unsigned()
.primary()
.notNullable();
table.bigint('id_reference1')
.notNullable()
.unsigned()
.references('id_reference1')
.inTable('table_reference1');
table.bigint('id_reference2')
.notNullable()
.unsigned()
.references('id_reference2')
.inTable('table_reference2');
});
2条答案
按热度按时间lp0sw83n1#
听起来像是knex的窃听器。如果你还没有这样做,你应该发送错误报告给knex的问题。在此之前,您可以通过手动将newid列设置为auto increment来解决这个问题。您还可以使用.tosql()检查在那里生成了什么样的查询。
有一件事是很好的,那就是完全复制的情况,您首先创建表,然后修改它,并显示它失败了。这样人们就能更容易地找出确切的问题。
oymdgrw72#
当您想插入一个新位置而不需要所有数据时,这是mysql设置。
如果不发送值,可以将mysql配置为null。临时解决方案(直到您重新启动服务器):设置@@global.sql\u mode='无自动创建用户,无引擎替换';
也可以在my.ini文件中设置。以下是模式详细信息:http://webnetkit.com/error-sqlstatehy000-general-error-1366-incorrect-integer-value-for-column/