我想知道稍后如何将 default () 添加和删除到 colmun

I want to know how to add & drop default () to colmun later

我正在使用 knex.js。 我想知道稍后如何将 default () 添加和删除到 colmun。

该列已经创建。

knex.schema.alterTable('users', function(t) {
    t.string('email', 30).notNullable()
})

唯一发现的增减。 https://knexjs.org/#Schema-unique https://knexjs.org/#Schema-dropUnique

添加:

   knex.schema.alterTable('users', function(t) {
      t.unique('email') 
   })

丢弃:

   knex.schema.alterTable('users', function(t) {
      t.dropUnique('email') 
   })

但是,没有找到默认的添加和删除方法

我试过了。

knex.schema.alterTable('users', function(t) {
 t.dropUnique('email').defaultTo('masao@gmail.com')
})

我收到这条错误消息。

ER_DUP_FIELDNAME: Duplicate column name 'email'

有大神知道吗?

应该这样做:

knex.schema.alterTable('users', function(t) {
  t.string('email', 30).notNullable().defaultTo('masao@gmail.com').alter();
});

.alter() 在查询构建器的末尾告诉 knex 为列创建 alter table 声明而不是正常的列添加(在许多数据库中,这样的改变根本不是微不足道的,但这适用于基本情况并更改类型/默认值并且至少不可为空)。

我正在使用 MSSQL

我的问题是当我试图将列(具有 default 约束)从类型 boolean 更改为类型 int 时。结果:

Msg 5074, Level 16, State 1, Line 35
The object 'DF__table*__column*__###' is dependent on column 'entangled'. 
    
    Msg 4922, Level 16, State 9, Line 35
ALTER TABLE ALTER COLUMN entangled failed because one or more objects access this column. 

所以我进行了大量搜索,发现在更改数据类型之前我需要删除默认约束。但事实是 knex 不支持删除 default 约束。所以我选择了 raw() SQL.

注意default约束名称应该假定为未知,因为当你运行迁移到不同的服务器或本地时,约束名称会改变。所以想法是先获取 default 约束名称并将其删除。根据这个post by Philip Kelley,你会找到方法来完成这个技巧。

我对这个问题的回答不正确。但我希望这个post可以帮助那些和我遇到同样问题的人。