如何在失败的插入上获取碰撞行的主键?

问题描述 投票:1回答:2

在我尝试将一行插入数据库并且由于重复而失败(不是主键冲突 - 另一个键)之后,如何获取阻止插入的冲突行的主键?

示例:表格:

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();

我可以在不进行其他查询的情况下获取碰撞行的主键吗?

c# mysql sql
2个回答
0
投票

在创建表时,您可以使用“Identity”关键字来执行所有“非空和自动增量”的操作。但这是为MsSQL尝试这个:

create table my_table
(
    ID int Primary key identity,
    unique_value varchar(60) NOT NULL
)

0
投票

正如你所说的那样你不用担心PK因此你可以检查具有唯一索引的列的值。如果已经有一个带有你在新行中传递的值的raw,那么你试图插入重复,否则不会。

© www.soinside.com 2019 - 2024. All rights reserved.