我需要重命名我的表之一和该表中的列之一。
我已经通过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_new_id_col”列的错误值:”
如何以正确的方式使用ID重命名自动整数列?
服务器响应并出现下一个错误: 代码:“ ER_NO_DEFAULT_FOR_FIELD”, errno:1364, sqlMessage:'字段\'tableToRename_new_id_col \'没有默认值', sqlState:“ HY000”, 索引:0,
UPD。以前,我创建了一个要重命名的表,如下所示:
.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');
});
答案 0 :(得分:0)
听起来像knex中的bug。如果尚未完成,则应将错误报告发送给knex问题。在此之前,您可以通过将新的id列设置为手动自动递增来解决此问题。您也可以查看.toSQL()在那里生成了哪种查询。
一个很好的事情是完整的复制案例,在该案例中,您首先创建表,然后对其进行更改并表明它失败了。这样,有人可以更轻松地找出确切的问题。
答案 1 :(得分:0)
这是mysql设置,当您要插入一个没有所有数据的新位置时。
如果不发送值,则可以将mysql配置为设置NULL。 临时解决方案(直到重新启动服务器): SET @@ GLOBAL.sql_mode ='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
或者您可以在my.ini文件中进行设置。 以下是模式的详细信息:http://webnetkit.com/error-sqlstatehy000-general-error-1366-incorrect-integer-value-for-column/