2011-03-29 120 views
0

我正在写一个简单的程序来将行插入到表中,但是当我开始编写程序时,我有一个疑问。在我的程序中,我会重复输入一次。那时我必须通知用户这已经存在。插入VS(选择并插入)

以下哪些途径的好用来实现这个

  1. 直接执行Insert语句将获得主键冲突错误,如果它是重复的通知,否则将被插入。一个要执行的查询

  2. 首先搜索主键值。如果找到价值提示用户。否则,请执行插入操作。对于非重复行,此方法需要2个查询。

请让我知道这些方法之间的权衡。哪一个最好遵循?

问候, 阳光明媚。

+1

您使用的是哪种语言和数据库?它是PHP和MySQL吗?每个数据库都有不同的功能,在选项2中,您需要锁定,因为在搜索之后和之前插入一些其他用户可以插入,您将得到重复和错误... – NickSoft 2011-03-29 11:23:29

+0

我使用DB2数据库和Java作为编程语言 – 2011-03-29 11:29:48

+0

嗨Nicksoft 我正在寻找这个行锁定概念。你能提供一些关于这方面的意见。 – 2011-03-29 11:41:23

回答

0

我会选择第二种方法。

第一个会导致异常被抛出这是众所周知的是非常昂贵的...

第二届办法将使用SELECT count(*) FROM mytable WHERE key = userinput这将是非常快,INSERT语句,你可以使用相同的数据库连接对象(假设为OO))。

使用预准备语句将预先优化查询,我认为这将使第二种方法比第一种方法更好,更灵活。

编辑:根据你的DBMS你也可以使用一个if not exists条款

EDIT2:我认为Java会抛出一个SQLExcpetion不管是什么地方出了错,即使用第一方法,您将无法之间不同重复的条目或不可用的数据库,而不必解析错误消息 - 这又是使用SELECT + INSERT(或if not exists

+0

感谢您的回应 – 2011-03-29 11:28:33