72 похожих чатов

Требуется при вставке заполнять столбец foo.any путем конкатенации autoincrement primary

и столбца foo.number. foo.any должен быть уникален. Как я понимаю, при использовании триггера в before insert не будет значения foo.id, поэтому вычислить значение foo.any до вставки невозможно. Может ли триггер after insert гарантировать, что при параллельных запросах не будет создано две записи с одинаковым значением autoincrement primary в foo.any?

create table foo
(
`id` int unsigned auto_increment
primary key,
`number` int unsigned,
`any` int unsigned,
unique index (`any`)
);

MySQL

12 ответов

20 просмотров

вы как-то странно спрашиваете вам надо в any писать text(id) + text(number)? уникальность id в целом вам гарантирует всё ну и в mysql вроде есть generated columns, судя по документации, чтобы вообще ничего не делать

W.-Blazkowicz Автор вопроса
Roman Sergeev
вы как-то странно спрашиваете вам надо в any писат...

уникальность id в целом вам гарантирует всё Насколько я понимаю, то при использовании after insert trigger после insert будет выполняться update, а значит, кажется, что без блокировки может сложиться ситуация, когда в таблицу попадет несколько записей с одинаковым foo.any (а точнее будет ошибка из-за unique index). Так ли это?

W. Blazkowicz
уникальность id в целом вам гарантирует всё Наско...

ещё раз ваш вопрос сводится к наличию гарантии уникальности foo.id триггер after insert ничего с уникальностью id сделать не может (если вы вдруг не начнёте пытаться менять id из триггера) конкатенация чего-то уникального примерно с чем угодно является уникальной (с точностью до нюансов поведения null в конкретном контексте)

Давай начнем с базового. Параллельных инсертов не существует

Roman Sergeev
ещё раз ваш вопрос сводится к наличию гарантии уни...

А не возникнет ситуация вида: "1" + "23" и "12" + "3"?

А собственно какую проблему ты этим колдунством решаешь?

W.-Blazkowicz Автор вопроса
Roman Sergeev
ещё раз ваш вопрос сводится к наличию гарантии уни...

Понятно, спасибо. Правильно ли я понимаю, что невозможно использовать insert trigger, чтобы при вставке поместить в столбец значение autoincrement id этой же новой строки? В случае с before insert autoincrement еще неизвестен, а в случае с after обновление невозможно, так как будет бесконечный цикл

Alexander Morozov
А не возникнет ситуация вида: "1" + "23" и "12" + ...

Возникнет, вы правы. Я не учёл разную длину текстового представления.

Roman Sergeev
Возникнет, вы правы. Я не учёл разную длину тексто...

Используй переменную между ними как разделение. Ту же точку например

W.-Blazkowicz Автор вопроса
Roman Sergeev
вы как-то странно спрашиваете вам надо в any писат...

ну и в mysql вроде есть generated columns, судя по документации, чтобы вообще ничего не делать К сожалению, mysql не позволяет создать generated column с autoincrement id. Error 3109: Generated column '' cannot refer to auto-increment column.

W.-Blazkowicz Автор вопроса
Ashish Cancelado
А собственно какую проблему ты этим колдунством ре...

Необходимо извлекать этот уникальный foo.any и транслировать его как "идентификатор" в другую систему

W.-Blazkowicz Автор вопроса

Правильно ли понимаю, что в виду невозможности использовать autoincrement id в триггерах и generated value, задачу, кроме как select с concat не решить? mysql

Похожие вопросы

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Это переведённый текст с английского. Я не говорю на русском, но могу использовать переводчик Телеграм. Приветствую! Я начинающий веб-разработчик и все еще учусь. В настояще...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
3
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Всем привет. Хотел бы написать для себя свою ос. Причины: 1) нужен опыт в чем-то 2) будет меньше весить 3) свое, но там будут свои задумки Я понимаю что нужно писать для всег...
Shadow Akira
18
А не хотим ли мы развлечься? 😉 Но так чтобы с пользой для наших профессиональных навыков?? 👨‍🎓👩‍🎓 Предлагаю на октябрь запланировать тестовый запуск новой командной игры "Игр...
Andrii Kurdiumov
2
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
5? да там все 10
Boris Vinogradov
12
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
что такое erg?
Maksim Lapshin
2
Карта сайта