|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
Здравствуйте. В таблице сложный первичный ключ из двух полей: id_1 и id_2. Как мне сделать, чтобы после добавления 1,2 набор 2,1 был дубликатом? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 22:43 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
Serge00, Версия MySQL какая? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 22:56 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
miksoft, 8.0.19 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 23:28 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
Мне видится несколько путей: 1) при вставке данных триггером BEFORE менять данные местами так, чтобы в id_1 шло меньшее значение, а в id_2 - большее. Ну и обычный первичный/уникальный индекс на эти два поля. 2) Помимо двух исходных полей id_1 и id_2 сделать вычисляемые поля id_min и id_max, в которые помещать меньшее и большее значения соответственно. А уже на эти поля накладывать уникальный индекс. 3) Сразу создавать PRIMARY KEY (least(id_1,id_2), greatest(id_1,id_2)) - не уверен ,что так можно, но запрета в доке не вижу. 4) Констрейнтом CHECK разрешить вставку данных только тогда, когда id_1 <= id_2 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2020, 23:43 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
miksoft Сразу создавать PRIMARY KEY (least(id_1,id_2), greatest(id_1,id_2)) - не уверен ,что так можно, но запрета в доке не вижу. Нет, не получится. PRIMARY KEY не может включать вычисляемые виртуальные поля, явные или неявные. А вот Код: sql 1. 2. 3. 4. 5. 6.
вполне рабочий код. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 07:57 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
Akina miksoft Сразу создавать PRIMARY KEY (least(id_1,id_2), greatest(id_1,id_2)) - не уверен ,что так можно, но запрета в доке не вижу. Нет, не получится. PRIMARY KEY не может включать вычисляемые виртуальные поля, явные или неявные. А вот Код: sql 1. 2. 3. 4. 5. 6.
вполне рабочий код. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 09:48 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
miksoft А совместить можно? Нет. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id_1, id_2), GREATEST(id_1, id_2)) )' at line 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 11:26 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
Akina miksoft А совместить можно? Нет. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id_1, id_2), GREATEST(id_1, id_2)) )' at line 3 А это на какой точно минорке? Мне проверить не на чем, но индексы по выражениям в 8.0.13 добавляли ( Functional Key Parts ). Может ещё комплект скобок нужен, как в примере с abs в доке? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 12:29 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
Melkij Может ещё комплект скобок нужен, как в примере с abs в доке? Скобки неочевидные. В других СУБД я их не встречал в этой роли, а тут надо вчитаться в доку, чтобы понять, что они нужны. Тогда так: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 12:41 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
miksoft Тогда так: ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 12:54 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
Akina miksoft Тогда так: ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 13:02 |
|
Составные индексы MySQL
|
|||
---|---|---|---|
#18+
miksoft может так и PRIMARY KEY заработает? Не, не работает. ERROR 3756 (HY000): The primary key cannot be a functional index Первичному индексу нужно статическое поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2020, 13:36 |
|
|
start [/forum/topic.php?fid=47&msg=39946454&tid=1828638]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 296ms |
total: | 561ms |
0 / 0 |