例如,
ALTER TABLE users ADD UNIQUE KEY(LoginID, Email);
ALTER TABLE users ADD UNIQUE KEY(Email);
ALTER TABLE users ADD UNIQUE KEY(LoginID);
如何使用Knex.Schema.createTable
我相信您应该能够做到以下几点:
Knex.Schema.createTable('tableName', function(table) {
table.unique(['LoginID', 'Email']);
table.unique('LoginID');
table.unique('Email');
});
让我知道它似乎不起作用。
工程,谢谢! 正在准备从Sequelize切换。
我尝试进行迁移
knex.schema.createTable('users', function (table) {
table.increments('id').primary();
table.string('network', 3).notNullable();
table.string('uid', 64).notNullable();
table.unique(['network', 'uid']);
table.timestamps();
}).then(function () {
console.log('Users Table is Created!');
});
但我不会获得唯一索引
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`network` varchar(3) NOT NULL,
`uid` varchar(64) NOT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
有什么事吗
@ theo-ptz该API不久前已更改。 根据文档, unique
现在是可链接的方法,您将使用与使用primary
和notNullable
。
@bendrucker ,谢谢。
但是有些东西行不通。
我尝试运行此代码
knex.schema.createTable('users', function (table) {
table.increments('id').primary();
table.string('network', 3).notNullable();
table.string('uid', 64).unique();
table.timestamps();
})
我在调试中看到了
--> ComQueryPacket
{ command: 3,
sql: 'create table
用户(
id int(11) unsigned not null auto_increment primary key,
网络varchar(3) not null,
uid varchar(64),
created_at datetime,
Updated_at datetime) default character set utf8' }
我没有索引。
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`network` varchar(3) NOT NULL,
`uid` varchar(64) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
有什么事吗
无论如何,在迁移中是否有创建复合唯一索引的条件?
提示:如果您在github上浏览时按“ y”键,它将切换到您正在查看的当前文件的当前sha url。 超级方便,我希望当您在评论中粘贴gh网址时github会自动执行此操作
由于此功能不在文档中,是否已弃用?
@RichardSimko根据测试套件,仍然支持复合键的table.unique([...])
语法,因此它看起来像是文档中的错误。
是的,我意识到它仍然可以工作,我只是担心由于它不在文档中而将被删除。
那么table.unique([...])
和table.primary([...])
什么区别?
根据文档,似乎使用primary([...])
是执行复合主键的正确方法:
在单列上调用时,它将将该列设置为表的主键。 要创建复合主键,请传递一个列名称数组:
table.primary(['column1', 'column2'])
。 约束名称默认为tablename_pkey
除非指定了constraintName
。
http://knexjs.org/#Schema -primary
最有用的评论
我相信您应该能够做到以下几点:
让我知道它似乎不起作用。