Хороший вопрос.
К сожалению, MySQL не поддерживает что-то вроде «вставить в, если не существует».
Есть несколько уродливых решений.
В большинстве случаев лучше всего справиться с этим в вашем приложении. выберите прежде, посмотрите, получите ли вы что-нибудь, вставьте, только если ничего не получили.
затем вы можете поместить уникальный ключ в поля, чтобы обеспечить согласованность базы данных.
Вы также можете напрямую вставлять и полагаться на уникальные ключи. вы получите ошибку, с которой вам придется иметь дело в вашем приложении. Вы МОЖЕТЕ различать ошибки, чтобы вы могли отобразить правильное сообщение. дубликат ключа будет 1062, если я запомню это исправление.
однако есть средства для достижения этой цели другими методами.
тот, о котором я знаю, называется таблицей мьютексов.
это работает так, что вы создаете вторую таблицу "mutex", у которой в качестве рабочей таблицы есть поля ключа syme, которую я теперь называю "table".
тогда вы можете сделать что-то вроде:
находится в таблице (field1, field2) select ("input1", "input2") из левой внешней таблицы соединений мьютекса на (mutex.field1 = table.field1 AND mutex.field2 = table.field2) где mutex.field1! = "input1" И mutex.field2! = "field2"
Я не проверял это, и я надеюсь, что я правильно помню tequnique, лучше посмотрите!
также возможно продвинуть это для большей гибкости, так что вы можете, например, разрешить только желаемое количество дубликатов в одной таблице.
но это не гарантирует согласованности данных, так как таблица данных также доступна, поэтому я действительно рекомендую первый метод: полагаться на ключевые ограничения, где это возможно, и обрабатывать номер ошибки в вашем приложении, если это невозможно разберитесь с этим в вашей заявке.