我正在使用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'
有人知道吗?
答案 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}}的介绍,您将找到解决问题的方法。
对于这个问题,我的答案不是正确的答案。但我希望这篇文章能对遇到像我一样遇到同样问题的人们有所帮助。