【问题标题】:I want to know how to add & drop default () to colmun later我想知道以后如何将默认()添加和删除到colmun
【发布时间】:2019-05-15 03:45:42
【问题描述】:

我正在使用 knex.js。 我想知道以后如何在 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.js


    【解决方案1】:

    应该这样做:

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

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

    【讨论】:

      【解决方案2】:

      我正在使用MSSQL

      我的问题是当我尝试将类型为boolean 的列(具有default 约束)更改为类型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,你会找到解决问题的方法。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        • 2022-08-24
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2021-04-21
        相关资源
        最近更新 更多