же строчку
Можно
расскажите, плес
Называется уникальный индекс, Погугли
а кроме этого способа?
А зачем что-то кроме этого? СУБД устроены логично и в них для обеспечения одной функциональности обычно используют одно средство а не 10
а самый строгий уровень изоляции транзакций не поможет добиться этой цели?
две параллельные вставки сначала проверяют что строки нет. к моменту вставки если одна из них опередила, вторая фейлится
я сейчас не говорю про самый эффективный способ. но просто: так можно?
Для того чтобы уровень изоляции позволял достигать этой цели тебе нужно как-то оформить в базе данных какое-то правило, какой-то конфликт который бы изоляция транзакций могла разрешать А тут у тебя никакого правила не подразумевается в запросе. Но даже если бы было правило к сожалению уровень serializable не всегда будет защищать от всех конфликтов, он теоретически Это должен делать, но не обязан. Кстати правилом должен был бы быть тот же самый уникальный ключ
Не поможет
Не выдумывай пушку для воробьёв
у меня колонка varchar(1024) и попытка включить его в комбинированный уникальный ключ выдаёт Error Code: 1071. Specified key was too long; max key length is 3072 bytes версия 8.0
Ну не надо делать такие длинные поля уникальными
если с текущим видом поля никак эту задачу не решить, то придётся менять, да.
в 8.1.0 нельзя такие длинные поля делать уникальными?
потому что насколько знаю лимит от версии к версии повышался как минимум однажды
а если уменьшить длину varchar, то имеющиеся уже данные останутся в том же виде?
Повышается, но он есть. Ну и если у тебя чтобы обеспечить уникальность нужно такое длинное поле это ОЧЕНЬ странно. Это видимо попытка построить естественный ключ на пользовательских данных.
Учти ещё , что varchar в байтах, а строки - в символах.
да, потому что вставки должны быть уникальны по нескольким характеристикам этих пользователей это вылилось в уникальный ключ по соотв. полям в базе. как иначе делать — хз какие-то хэшы по этим характеристикам могут привести к коллизиям, тогда уникальности не добиваемся
Обсуждают сегодня