добавить уникальность в столбец таблицы только в некоторых случаях в MySQL, используя Knex - PullRequest
0 голосов
/ 21 декабря 2018

Я использую MySQL.Я хочу, чтобы столбец имел уникальные значения только в некоторых случаях.

Например, таблица может иметь следующие значения:

 +----+-----------+----------+------------+
 | id | user_id   | col1     | col2       |
 +----+-----------+----------+------------+
 |  1 |         2 | no       | no         |
 |  2 |         2 | no       | no         |
 |  3 |         3 | no       | yes        |
 |  4 |         2 | yes      | no         |
 |  5 |         2 | no       | yes        |
 +----+-----------+----------+------------+ 

Я хочу, чтобы no | no можно было повторить для того же пользователя, но нет комбинации yes | no.Это возможно в MySQL?А с knex?

Моя миграция для этой таблицы выглядит следующим образом

return knex.schema.createTable('myTable', table => {
    table.increments('id').unsigned().primary();
    table.integer('uset_id').unsigned().notNullable().references('id').inTable('table_user').onDelete('CASCADE').index();
    table.string('col1').defaultTo('yes');
    table.string('col2').defaultTo('no');
});

1 Ответ

0 голосов
/ 27 декабря 2018

Это не простая задача.Вам потребуется частичный уникальный индекс для нескольких столбцов.

Я не мог определить, что mysql будет поддерживать частичные индексы https://dev.mysql.com/doc/refman/8.0/en/create-index.html

Так что может что-то вроде того, что описано здесь, но использование триггеров для этого кажется немного излишним https://dba.stackexchange.com/questions/41030/creating-a-partial-unique-constraint-for-mysql

...