У меня есть SQL-запрос для PHP/MySQL и следующая проблема:SQL Insert пропустить запись
INSERT INTO UserConnected(UID1, UID2) VALUES ('1','2'),('1','3'),('1','4');
Таким образом, проблема в том, что если есть один пользователь из UID2 не доступен в UserAccounts (внешний ключ из UserConnected в UserAccount) весь запрос сломается, и ничего не будет вставлено вообще.
Так что скажем, для некоторого пользователя reaseon User 4 уже был удален, и этот запрос выполняется, потому что идентификатор поступает из любого другого источника (скажем, facebook или google), он попытается вставить, но он не может, поскольку пользователь недоступен ,
Есть ли способ сказать, что если ключ терпит неудачу, не вставляйте и не переходите к следующему элементу, не делая несколько запросов/вызовов. Я бы предпочел сделать это в одном запросе.
спасибо! С наилучшими пожеланиями!
попытка INSERT IGNORE – CSK
Поскольку вы добавили это как 'SQL' в дополнение к' MySQL' я хотел бы отметить, что это синтаксис - это 'MySQL' специфический и не является стандартным' SQL', поэтому будьте осторожны, если вы хотите портировать свою базу данных в будущем. – apokryfos
Благодарим вас за быстрый ответ. IGNORE Unfortuately не работает: # 1452 - Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа завершилось с ошибкой (Database.UserConnected, CONSTRAINT UID2_ibfk_2 ИНОСТРАННЫЙ КЛЮЧ (UID2) ССЫЛКИ UserAccount (UID) ВКЛ. УДАЛИТЬ КАСКАД НА ОБНОВЛЕНИИ CASCADE) Он работает, когда я вручную удалите значение вставки для недоступного пользователя, но запрос будет динамическим, и мне нужен способ вставить все доступные учетные записи пользователей и пропустить неизвестные. – SomehowLuke