Как получить первичный ключ встречной строки при неудачной вставке? - PullRequest
1 голос
/ 14 апреля 2019

После того, как я попытался вставить строку в базу данных, и она не удалась из-за дублирования (не столкновение первичного ключа - другой ключ), как я могу получить первичный ключ сталкивающейся строки, которая помешала вставке?

Пример: Стол:

CREATE TABLE `my_table` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `unique_value` varchar(60) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `unique_data` (`unique_values`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Некоторые исходные данные:

INSERT INTO `my_table`(`unique_value`) VALUES ('unique string 1');
INSERT INTO `my_table`(`unique_value`) VALUES ('unique string 2');

А теперь это не удастся из-за коллизии в индексе:

MySqlConnection conn = new MySqlConnection(connString);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO `my_table`(`unique_value`) VALUES 'unique string 2'";
comm.ExecuteNonQuery();
conn.Close();

Могу ли я получить первичный ключ сталкивающейся строки, не делая еще один запрос?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Поскольку вы сказали это, что вы не беспокоитесь о PK, следовательно, вы можете проверить значение столбца с уникальным индексом. Если уже есть raw со значением, которое вы передаете в новую строку, то вы пытаетесь вставить дубликатв противном случае нет.

0 голосов
/ 14 апреля 2019

при создании таблицы вы можете использовать ключевое слово «Identity», которое будет выполнять все операции «не ноль и автоинкремент». Но это для MsSQL Попробуйте это:

create table my_table
(
    ID int Primary key identity,
    unique_value varchar(60) NOT NULL
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...