Mysql 如果存在,则插入更新
我一直在寻找其他资源,只是有点困惑。我想举一个例子来说明我的问题 我有一个游戏服务器,它将来自steam的唯一id存储在数据库中,同时还有一列用于该用户的特定权限。例如id:712309123810权限:默认值 我想要实现的是从表单发送数据$Id和$permission已发布。将此数据插入数据库中的列下,例如sake;'“Id”和“权限”。我可以做到这一点,但我遇到的问题是,如果数据库中已经存在$id,如何只更新$permission列 我已经读过关于重复密钥更新的文章,但对如何正确使用它感到困惑。我是mysql的新手Mysql 如果存在,则插入更新,mysql,Mysql,我一直在寻找其他资源,只是有点困惑。我想举一个例子来说明我的问题 我有一个游戏服务器,它将来自steam的唯一id存储在数据库中,同时还有一列用于该用户的特定权限。例如id:712309123810权限:默认值 我想要实现的是从表单发送数据$Id和$permission已发布。将此数据插入数据库中的列下,例如sake;'“Id”和“权限”。我可以做到这一点,但我遇到的问题是,如果数据库中已经存在$id,如何只更新$permission列 我已经读过关于重复密钥更新的文章,但对如何正确使用它感到困
感谢您的时间。当语句的insert部分违反唯一约束时(在您的情况下,
id
上的主键),重复键上的将触发。所以,把这一切放在一起:
INSERT INTO mytbale (id, permissions)
VALUES (:id, :permissions)
ON DUPLICATE KEY UPDATE permissions = :permissions
手册对其进行了很好的解释:
您的查询可能类似于:
INSERT INTO myTable (id, permissions) VALUES (712309123810, "default")
ON DUPLICATE KEY UPDATE permissions = "default";
这要求表在id列上包含唯一或主键
通常,如果您试图插入一个新行,该新行将为唯一键或主键创建重复值,则这是一个错误。在重复密钥更新上使用
会改变:相反,插入将转换为更新
如果不存在具有该id的记录,我给出的示例查询将插入一条新记录,或者它将更新现有记录的权限。通常,id
可以具有多个权限。如果是,您不想覆盖权限;你想积累它们。如果是这种情况,您可能需要连接表来处理此问题:
create table UserPermissions (
UserPermissionsId int auto_increment primary key,
UserId int not null,
PermissionId int not null,
constraint fk_UserPermissions_UserId foreign key UserId references Users(UserId),
constraints fk_UserPermissions_PermissionId foreign key Permissions references Permissions (PermissionId)
);
如果用户只有一个被覆盖的权限,则重复密钥更新时的是合适的。一个id
可以有多个权限吗?只需要一个权限即可。谢谢您的回复