gpt4 book ai didi

mysql - 我使用 knex.js 的 SQL 修改表

转载 作者:可可西里 更新时间:2023-11-01 06:59:38 25 4
gpt4 key购买 nike

需要使用 knex 更改 MySql Db 中列的数据类型和默认值;后来数据类型是date,需要将其更改为dateTime,默认值也需要从NULL更改为CURRENT_TIMESTAMP

下面给出对应的MySql Query实现

ALTER TABLE `Employees` 
CHANGE COLUMN `added_date` `added_date` DATETIME DEFAULT CURRENT_TIMESTAMP ;

我已经创建了 knex 迁移文件来运行上述更改:

迁移文件的内容如下:

exports.up = function(knex, Promise) {
return knex.schema.alterTable('Employee', function(t) {
t.dateTime('added_date').defaultTo(knex.fn.now());
});
} ;

exports.down = function(knex, Promise) {
return knex.schema.alterTable('Employee', function(t) {
t.date('added_date').nullable();
});
};

但这在构建时总是会抛出错误。这就像

Knex:警告 - 迁移因错误而失败:alter table Employee add added_date datetime default CURRENT_TIMESTAMP - ER_DUP_FIELDNAME:重复的列名“added_date”迁移最新版本时出错错误:ER_DUP_FIELDNAME:列名称“added_date”重复

任何人都可以分享使用上述给定更改更改表的确切方法/语法吗?

最佳答案

目前(knex 0.12.6)没有办法在 raw() 调用的情况下做到这一点。将来如果https://github.com/tgriesser/knex/pull/1759完成后将提供更复杂的列更改功能。

exports.up = function(knex, Promise) {
return knex.schema.raw('ALTER TABLE `Employees` CHANGE COLUMN `added_date` `added_date` DATETIME DEFAULT CURRENT_TIMESTAMP');
};

exports.down = function(knex, Promise) {
return knex.schema.raw('ALTER TABLE `Employees` CHANGE COLUMN `added_date` `added_date` DATE DEFAULT NULL');
};

编辑:我开始完成那个 pull request,在下一个 knex(0.12.7 或 0.13.0)版本中将能够做到:

exports.up = function(knex, Promise) {
return knex.schema.alterTable('Employee', function(t) {
t.dateTime('added_date').defaultTo(knex.fn.now()).alter();
});
};

exports.down = function(knex, Promise) {
return knex.schema.alterTable('Employee', function(t) {
t.date('added_date').nullable().alter();
});
};

我会将这些也添加到集成测试中以确保它们有效。

关于mysql - 我使用 knex.js 的 SQL 修改表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41959299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com