Mysql при обновлении дубликата ключа с несколькими ключами (один первичный ключ и один уникальный ключ с несколькими столбцами) Dapper

#mysql #sql #asp.net-core-3.1

#mysql #sql #asp.net-core-3.1

Вопрос:

Структура таблицы Id(Guid) | Name(string) | Date(Date) | Address(string)

с ограничениями PRIMARY KEY (Id), UNIQUE KEY Rec_Unique (Name,Date)

Я пытаюсь вставить или обновить дублирующийся ключ. Я использую dapper, и ExecuteAsync возвращает строки, выполненные как 1 или иногда 2.

Как заставить его возвращать 0 вместо этого, когда ключи существуют, я думаю, что он смотрит на Id и во время вставки, но я хочу, чтобы он просматривал как id, так и (имя, дату) перед обновлением

Запрос, который я выполняю с помощью dapper, является

 insert into exam (Id, Name, Date, Address) 
values (@Id, @Name, @Date, @Address) 
on duplicate key update Date = @Date, Address= @Address
 

Комментарии:

1. Как заставить его возвращать 0 вместо этого. Почему? Строка либо вставляется (затронута 1 строка), либо обновляется (затронуты 2 строки). Если затронуты нулевые строки, возникает ошибка.

2. » Я думаю, что он просматривает Id и во время вставки, но я хочу, чтобы он просматривал как id, так и (имя, дату) перед обновлением «. Он рассматривает оба, но ваши данные не могут нарушать оба (поскольку тогда MySQL не будет знать, какую из двух строк обновлять). Также имейте в виду, что, если идентификатор существует, он в настоящее время не обновит имя! (например, если вы вставляете «1, лила, сегодня, Марс», и «1, Кришна, вчера, плутон» существует (нарушение ключа для id = 1), эта строка изменится на «1, Кришна, сегодня, Марс», а не «1, лила, сегодня, Марс». Но это не имеет ничего общего с возвращаемым значением 0/1/2.