Knex: Knex.Schema:如何创建复合唯一键?

创建于 2013-08-12  ·  12评论  ·  资料来源: knex/knex

例如,

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

question

最有用的评论

我相信您应该能够做到以下几点:

Knex.Schema.createTable('tableName', function(table) {
  table.unique(['LoginID', 'Email']);
  table.unique('LoginID');
  table.unique('Email');
});

让我知道它似乎不起作用。

所有12条评论

我相信您应该能够做到以下几点:

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现在是可链接的方法,您将使用与使用primarynotNullable

@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

有什么事吗

无论如何,在迁移中是否有创建复合唯一索引的条件?

有关综合唯一约束的示例,请参见集成测试:

https://github.com/tgriesser/knex/blob/master/test/integration/schema/index.js#L92

链接到源文件时, @ bendrucker请使用标签/提交而不是主文件:
您的链接不再起作用: https :
VS你的意思: https :
并使用最新版本(0.8.6): https :

提示:如果您在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

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

tjwebb picture tjwebb  ·  3评论

fsebbah picture fsebbah  ·  3评论

npow picture npow  ·  3评论

PaulOlteanu picture PaulOlteanu  ·  3评论

ghost picture ghost  ·  3评论