我有一个具有唯一varchar列的表。此列包含我可以向其发送推送通知的Android和iOS设备ID。更新行的唯一字段并将现有行中的值设置为空
如果用户在其他设备上登录到其他设备上已存在该ID的帐户,我希望将原始帐户的列设置为空,并将新行替换为设备ID。
是否有一个语句可以实现这一点?或者我必须创建一个事务,该事务首先检查表中的值并在更新新记录之前将其设置为空?显然,如果我可以在一个声明中这样做,那将是更可取的。
我现在有一个查询的是::
UPDATE gp_login SET deviceOS='$OS', device_id='$deviceID', id_updated_at=NOW() WHERE email='$email'
当然,当一个DEVICE_ID已经存在另一行中失败,根据答案&评论
编辑澄清几件事桌子。
我使用REPLACE播放,但它删除行,并有不应丢失的行中的其他数据。
设备ID尽管是唯一的,但不是表的主键。 该表格是登录到移动应用程序服务的移动用户帐户的列表。他们的设备ID已更新到其帐户行中,但仍然是唯一的。我想要更新一行的设备ID,即使其他用户存在相同的设备ID - 我只想先设置它为null,以满足唯一约束条件。
您的查询在哪里? –
你能否提供一个粗略的例子来正确引导你? – sagar
感谢您的意见。我已经更新了这个问题。 – Cross2four