重命名后具有自动增量的字段没有默认值

时间:2018-07-09 16:23:19

标签: mysql knex.js

我需要重命名我的表之一和该表中的列之一。

我已经通过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');
 });

2 个答案:

答案 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/