У меня есть БД, в которой я хотел бы, чтобы один из трех ключей (userId, udid и токен) идентифицировал строку: все три из них являются уникальными ключами, а первая также первичный и автоинкрементный. В принципе, я хотел бы обновить все значения, когда один из ключей один и тот же. К сожалению, если я использую:Использование INSERT ... ON DUPLICATE KEY UPDATE с несколькими ключами
INSERT INTO users (udid, nickname, playerID, `language`, app, token,
`In Arrivo HD`) VALUES ('AB71C145-2FFE-4BA8-B0E7-9F121948C962', 'Fabry65', 'G:274138044', 'it_IT', 'In Arrivo HD',
'605a383a7e3469a3da0b471cd5b73af7384ca5e389eeb7cd72e550e96f37f450', NOW()+ INTERVAL 1 YEAR)
ON DUPLICATE KEY UPDATE udid='AB71C145-2FFE-4BA8-B0E7-9F121948C962',
token='605a383a7e3469a3da0b471cd5b73af7384ca5e389eeb7cd72e550e96f37f450', lastAccess=NOW(), active=1, nickname='Fabry65',
playerID='G:274138044',`language`='it_IT', app='In Arrivo HD'
И ключ, который будет повторяться случается фишку, у меня есть ошибка:
Duplicate entry '605a383a7e3469a3da0b471cd5b73af7384ca5e389eeb7cd72e550e96f37f450' for key 'token'
И то же самое было бы, конечно, если бы это был другой два других ключи, которые необходимо повторить. Цепочка ON DUPLICATE KEY UPDATE не работает. Как я могу это сделать?
Вкратце моя проблема заключается в обновлении строки, если любой из трех ключей один и тот же, и вставить новую строку, если все они разные.
На самом деле я закончил расщепление запроса. Я оставил это, убрав токенную часть, если userId был нулевым. В противном случае я сделал простое обновление для userId, учитывая, что этот идентификатор задан системой, и пользователь, следовательно, уже существует, если не null. –
, но он не решает все: когда я это делаю: UPDATE пользователи SET token = '605a383a7e3469a3da0b471cd5b73af7384ca5e389eeb7cd72e550e96f37f450', udid = 'AB71C145-2FFE-4BA8-B0E7-9F121948C962', lastAccess = NOW(), active = 1, nickname = 'Fabry65' , playerID = 'G: 274138044', 'language' = 'it_IT', app = 'В Arrivo HD' WHERE userId = 10025 с уже назначенным токеном, я все равно получаю дубликат. –
Я добавил разъяснение. –