当我尝试将行插入数据库并且由于重复而导致失败(不是主键冲突-另一个键)后,如何获取冲突行的阻止插入的主键?
示例: 表格:
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();
是否可以在不进行其他查询的情况下获取冲突行的主键?
答案 0 :(得分:0)
在创建表时,您可以使用“ Identity”关键字来完成所有“非null和自动递增”的工作。 但这是针对MsSQL的 试试这个:
create table my_table
(
ID int Primary key identity,
unique_value varchar(60) NOT NULL
)
答案 1 :(得分:0)
正如您所说的那样,您不必担心PK,因此您可以检查具有唯一索引的列的值。如果已经有原始值,并且您要在新行中传递该值,那么您将尝试插入重复项否则没有。