我有一个数据库{id,name,uuid,world,x,y,z}
如何插入此数据库,如果存在{world,x,y,z}与我插入的行相同的行,则旧行将被删除。我将id作为PRIMARY KEY并设置为AUTO_INCREMENT。
我搜索了这个论坛和谷歌,但没有发现任何有助于解决我的问题。
谢谢
答案 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
)