我如何只使用一个SQL查询条件插入?

时间:2013-08-08 17:52:08

标签: sql insert conditional-statements not-exists

我正在为我的Java应用程序使用swing菜单。我也有MySQL数据库。在数据库的一个表中有一个列(名为brind),该列必须具有唯一值(除了ID列,其中值是自动插入的)。因此,通过我的JFrame表单上的文本字段,我将尝试在该表中插入一些值,但前提是该表中尚未存在该brind值(即,在列中)。我需要只有一个mysql查询,称之为条件插入。我该怎么做呢? 感谢

3 个答案:

答案 0 :(得分:1)

如下所示的查询应该按照您的要求进行:

INSERT INTO `thetable`
    SELECT 'values', 'to', 'insert' 
    WHERE NOT EXISTS (
        SELECT * 
        FROM `thetable`
        WHERE brind='whatever'
    )

values,to,insert应替换为您要插入的字段的值。

但是,你可以通过这里的其他一些建议得到更好的服务,例如

  1. 首先检查值,如果存在则不插入(在一个事务中执行此操作以处理并发问题,假设您的事务隔离设置正确),
  2. 尝试插入并处理唯一约束违规失败。
  3. 在我看来,选项2是一个不错的选择。

答案 1 :(得分:0)

REPLACE INTO myTable
SET brind = 'someValue'

我认为你有数据库设计问题。如果列brind必须是唯一的,那么它应该可以作为主键。

答案 2 :(得分:0)

  

将尝试在该表中插入一些值,但仅限于该brind   值不存在于表中(即列中)

可以在数据库级别和应用程序级别完成。

由于数据库级别最简单,最安全。在该列上创建一个索引并使其唯一(而不是标识符!),如果该值已存在,则不会插入数据库。 Here是如何做到的。

应用程序级别:您将缓存数据库的内容,并锁定表,禁止其他应用程序修改它。如果你想要和解锁表格,请插入它。

我建议第一个解决方案