插入int mysql而不重复

时间:2014-12-07 13:58:02

标签: java mysql sql-insert

我有一个数据库{id,name,uuid,world,x,y,z}

如何插入此数据库,如果存在{world,x,y,z}与我插入的行相同的行,则旧行将被删除。我将id作为PRIMARY KEY并设置为AUTO_INCREMENT。

我搜索了这个论坛和谷歌,但没有发现任何有助于解决我的问题。

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用insert . . . on duplicate key update

insert into table(name, uuid, world, x, y, z)
    values (@name, @uuid, @world, @x, @y, @z)
    on duplicate key update name = values(name),
                            uuid = values(uuid);

变量@name等只是您的值的占位符。这也假定id是自动递增的,因此不需要插入。

为此,您需要在四列上使用唯一索引:

create unique index idx_table_world_x_y_z on table(world, x, y, z);

如果这些已经被声明为主键,那么这不是必需的。

答案 1 :(得分:1)

来自MySQL docs

  

REPLACE的工作原理与INSERT完全相同,只是如果有一个旧行   该表与PRIMARY KEY或a的新行具有相同的值   UNIQUE索引,在插入新行之前删除旧行。

因此声明UNIQUE索引行列(word,x,y,z)然后:

REPLACE INTO my_table (name, uuid, world, x, y, z)
VALUES (
    -- your values here 
)