Mysql 干插入以检查索引冲突

Mysql 干插入以检查索引冲突,mysql,sql,Mysql,Sql,如何在不实际插入内容的情况下检查插入是否会导致唯一索引冲突错误?使用唯一列条件运行SELECT查询,如果结果数据集不为空,则表示将发生唯一索引错误: SELECT 1 FROM table WHERE unique_column = 'new_insert_value' LIMIT 1 使用唯一列条件运行SELECT查询,如果结果数据集不为空,则表示将发生唯一索引错误: SELECT 1 FROM table WHERE unique_column = 'new_insert_value' L

如何在不实际插入内容的情况下检查插入是否会导致唯一索引冲突错误?

使用唯一列条件运行SELECT查询,如果结果数据集不为空,则表示将发生唯一索引错误:

SELECT 1 FROM table WHERE unique_column = 'new_insert_value' LIMIT 1

使用唯一列条件运行SELECT查询,如果结果数据集不为空,则表示将发生唯一索引错误:

SELECT 1 FROM table WHERE unique_column = 'new_insert_value' LIMIT 1

插入
并捕获错误。这是最便宜的方法,因为它执行查找并在成功时实际执行插入。当然,在实际插入之前进行单独检查的问题是并发性。多个进程可以执行检查,所有进程都认为不会发生冲突,并且所有进程都决定
插入
,只会发生冲突。正确处理这个场景(先检查,然后插入)是非常困难的(锁定一个不存在的插槽),这真的不值得


MySQL具有优雅地处理冲突的语法。

INSERT
并捕获错误。这是最便宜的方法,因为它执行查找并在成功时实际执行插入。当然,在实际插入之前进行单独检查的问题是并发性。多个进程可以执行检查,所有进程都认为不会发生冲突,并且所有进程都决定
插入
,只会发生冲突。正确处理这个场景(先检查,然后插入)是非常困难的(锁定一个不存在的插槽),这真的不值得


MySQL具有优雅地处理冲突的语法。

另一个选项是立即执行插入和回滚。

另一个选项是立即执行插入和回滚。

这不完全是我需要的。数据生成非常耗时,我想在生成过程之前检查它是否存在。在我的例子中,最好先检查数据是否存在,然后生成它们,然后插入。。。就像你说的,在重复密钥更新上。不完全是我需要的。数据生成非常耗时,我想在生成过程之前检查它是否存在。在我的例子中,最好先检查数据是否存在,然后生成它们,然后插入。。。如你所说,在重复密钥更新中。我认为“向下投票者”认为另一个答案(带有捕获错误)是正确的,我误解了你的问题。但我不这么认为。您要求在插入之前检查是否有任何记录包含新数据。也许你需要一个用户名检查senario,并希望在之前给访问者反馈用户名标记。我认为“向下投票者”认为另一个答案(带有捕获错误)是正确的,我误解了你的问题。但我不这么认为。您要求在插入之前检查是否有任何记录包含新数据。也许您需要一个用户名检查senario,并希望在之前或之后向访问者提供该用户名标记的反馈。