我一直在寻找其他资源,我只是有点困惑。我想将一个例子与我的问题联系起来。
我有一个游戏服务器,它在数据库中存储来自steam的唯一ID,并且还有一个用于该用户的特定权限的列。例如:712309123810权限:默认
我想要实现的是从表单发送数据; $ Id和$权限已发布。例如,将这些数据插入到列下的数据库中; '标识'和#39;许可'我可以做到这一点,我遇到的问题是如果db中已经存在$ id,那么理解如何仅更新$ permission列。
我已经阅读了关于ON DUPLICATE KEY UPDATE,但我对如何正确使用它感到困惑。我对mysql很新。
感谢您的时间。
答案 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
是合适的。