У нас нет уникального индекса по полю, но хочется либо вставить строку с новым уникальным значением поля, либо обломаться. Причем хочется сделать это в одну операцию INSERT. Без предварительного SELECT и участия PHP. Пусть есть таблица test(id, code, name) где id автоинкремент. и мы делаем Код (SQL): INSERT INTO test(code, name) VALUES('xyz', 'John') как НЕ вставить лишний раз 'xyz' ?
Например: Код (Text): insert into test(`code`, `name`) select 'xyz', 'John' where not exists (select id from test where `code` = 'xyz');
@ADSoft, ТСу не нужен UPDATE. Про уник. индекс согласен. По уму задача решается уником с INSERT IGNORE, но artoodetoo написал, что уника нет. Видимо, его создание не представляется возможным. Хотя я и не понимаю, зачем нужны подобные ограничения, но встревать со своими непонятками не буду
Спасибо. Сейчас кажется странным, что я сам не подумал про NOT EXISTS Это годное решение. Я в курсе про индексы и INSERT IGNORE. Тут специфический случай. Просто не хотел грузить вас лишними подробностями в ТЗ На самом деле колонка не может быть уникальной т.к. уже содержит повторы. Но мы не должны добавлять новое неуникальное значение в своём инсерте.
Увы, не забыл и даже проверил работоспособность запроса. Правда лишь для mysql, где даже в описании выражения select и from и where находятся на одном уровне и оба необязательны.