INSERT如果存在UPDATE

时间:2016-03-05 12:38:23

标签: mysql

我一直在寻找其他资源,我只是有点困惑。我想将一个例子与我的问题联系起来。

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

我想要实现的是从表单发送数据; $ Id和$权限已发布。例如,将这些数据插入到列下的数据库中; '标识'和#39;许可'我可以做到这一点,我遇到的问题是如果db中已经存在$ id,那么理解如何仅更新$ permission列。

我已经阅读了关于ON DUPLICATE KEY UPDATE,但我对如何正确使用它感到困惑。我对mysql很新。

感谢您的时间。

3 个答案:

答案 0 :(得分:0)

当语句的插入部分违反唯一约束(在您的情况下 - inputElement.$.input.select() 上的主键)时,on duplicate key将触发。所以,把它们放在一起:

id

答案 1 :(得分:0)

手册解释得相当好: http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

您的查询可能类似于:

INSERT INTO mytbale (id, permissions) 
VALUES (:id, :permissions)
ON DUPLICATE KEY UPDATE permissions = :permissions

这要求表包含id列上的唯一键或主键。

通常,如果您尝试插入将为唯一键或主键创建重复值的新行,则会出错。使用INSERT INTO myTable (id, permissions) VALUES (712309123810, "default") ON DUPLICATE KEY UPDATE permissions = "default"; 更改:相反,您的插入会转换为更新。

如果没有该ID存在,我给出的示例查询将插入一条新记录,否则它将更新现有记录的权限。

答案 2 :(得分:0)

通常,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)
);

如果用户只有一个被覆盖的权限,则on duplicate key update是合适的。