Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果存在,则插入更新_Mysql - Fatal编程技术网

Mysql 如果存在,则插入更新

Mysql 如果存在,则插入更新,mysql,Mysql,我一直在寻找其他资源,只是有点困惑。我想举一个例子来说明我的问题 我有一个游戏服务器,它将来自steam的唯一id存储在数据库中,同时还有一列用于该用户的特定权限。例如id:712309123810权限:默认值 我想要实现的是从表单发送数据$Id和$permission已发布。将此数据插入数据库中的列下,例如sake;'“Id”和“权限”。我可以做到这一点,但我遇到的问题是,如果数据库中已经存在$id,如何只更新$permission列 我已经读过关于重复密钥更新的文章,但对如何正确使用它感到困

我一直在寻找其他资源,只是有点困惑。我想举一个例子来说明我的问题

我有一个游戏服务器,它将来自steam的唯一id存储在数据库中,同时还有一列用于该用户的特定权限。例如id:712309123810权限:默认值

我想要实现的是从表单发送数据$Id和$permission已发布。将此数据插入数据库中的列下,例如sake;'“Id”和“权限”。我可以做到这一点,但我遇到的问题是,如果数据库中已经存在$id,如何只更新$permission列

我已经读过关于重复密钥更新的文章,但对如何正确使用它感到困惑。我是mysql的新手


感谢您的时间。

当语句的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
可以有多个权限吗?只需要一个权限即可。谢谢您的回复