我想知道以后如何将default()拖放至colmun

时间:2019-05-15 03:45:42

标签: knex.js

我正在使用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') 
   })

DROP:

   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'

有人知道吗?

2 个答案:

答案 0 :(得分:0)

这应该做到:

knex.schema.alterTable('users', function(t) {
  t.string('email', 30).notNullable().defaultTo('masao@gmail.com').alter();
});
查询构建器末尾的

.alter()告诉knex为该列创建alter table声明,而不是普通的列添加(在许多数据库中,这样的更改根本不是一件容易的事,但这适用于基本情况和更改类型/默认值,并且至少不能为null)。

答案 1 :(得分:0)

我正在使用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约束名称并将其删除。根据{{​​3}}的介绍,您将找到解决问题的方法。

对于这个问题,我的答案不是正确的答案。但我希望这篇文章能对遇到像我一样遇到同样问题的人们有所帮助。