Ваш код, вероятно, будет работать, но есть другие вещи, которые могут пойти не так при выполнении оператора PDO.Вы захотите проверить, действительно ли вы получили нарушение ограничения, и даже если это не другой тип (например, вы также можете получить нарушение внешнего ключа при вставке пары значений, у которых нет соответствующих строк в одном изссылочные таблицы).AFAIK, кросс-СУБД не существует способа достичь этого, хотя.
Для СУБД, поддерживающих транзакции (Oracle, SQL Server, PostgreSQL, MySQL в некоторой степени ...), вот другой подход:
- начало транзакции
- удаление всех строк, соответствующих вставляемой строке (удаление нуля или одной строки)
- insert
- commit