c# - 如何在插入失败时获取冲突行的主键?
问题描述
在我尝试将一行插入数据库并且由于重复(不是主键冲突 - 另一个键)而失败后,如何获取阻止插入的冲突行的主键?
示例:表格:
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();
我可以在不进行其他查询的情况下获取冲突行的主键吗?
解决方案
在创建表时,您可以使用“Identity”关键字来完成所有“非空和自动增量”的工作。但这适用于 MsSQL 试试这个:
create table my_table
(
ID int Primary key identity,
unique_value varchar(60) NOT NULL
)
推荐阅读
- java - 在android studio中同时运行两个类
- javascript - Babel 编译导致:syntaxError: Unexpected token (38:4)
- android - Activity 根视图何时膨胀?
- excel - 扫描文件夹中的 .jpg 文件名,匹配 Excel 工作表单元格中的文件名并将它们粘贴到单元格中
- r - R中带有paste0的新列
- php - 如果重复次数彼此不同,如何使用一个查询插入多条记录
- python - 剥离和重命名文件
- git - 在 GitLab 中使用个人访问令牌从提交中识别用户
- java - 即使不应该接受输入,JAVA程序也会一直阻止终端输入
- consul - Consul bootstrap-期望值