Например,
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
users (
id int(11) unsigned not null auto_increment primary key,
network 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://github.com/tgriesser/knex/blob/master/test/integration/schema/index.js#L92
VS, что вы имели в виду: https://github.com/tgriesser/knex/blob/0.5.11/test/integration/schema/index.js#L92
И используя последнюю версию (0.8.6): https://github.com/tgriesser/knex/blob/0.8.6/test/integration/schema/index.js#L157
Совет: если вы нажмете клавишу «y» во время просмотра на github, он переключится на текущий URL-адрес sha для текущего файла, который вы просматриваете. Супер удобно, я бы хотел, чтобы github просто делал это автоматически, когда вы вставляете URL-адрес gh в комментарий
Эта функция устарела, поскольку ее нет в документации?
@RichardSimko Согласно набору тестов, синтаксис table.unique([...])
для составных ключей все еще поддерживается, поэтому это похоже на ошибку в документации.
Да, я понял, что он все еще работает, я просто волновался, что его собираются удалить из-за того, что его нет в документации.
Так в чем разница между table.unique([...])
и table.primary([...])
?
Согласно документам, похоже, что использование primary([...])
- это правильный способ создания составных первичных ключей:
При вызове для одного столбца он устанавливает этот столбец в качестве первичного ключа для таблицы. Чтобы создать составной первичный ключ, передайте массив имен столбцов:
table.primary(['column1', 'column2'])
. Имя ограничения по умолчанию -tablename_pkey
если не указаноconstraintName
.
http://knexjs.org/#Schema -primary
Самый полезный комментарий
Я считаю, что вы сможете сделать это с помощью:
Сообщите мне, если это не работает.