mysql - 更新行的唯一字段并将现有行中的值设置为 null

标签 mysql sql

我有一个带有唯一 varchar 列的表。此列包含我可以向其发送推送通知的 Android 和 iOS 设备 ID。

如果用户在另一台设备上登录其帐户,而该 id 已存在于另一行中,我希望将原始帐户的列设置为 null,而新行将包含设备 ID。

是否有一个语句可以为我实现此目的,或者我必须创建一个事务来首先检查表中的值并将其设置为 null,然后再更新新记录?显然,如果我能在一篇声明中做到这一点,那就更好了。

根据您的回答和评论进行编辑以澄清一些事情:

我目前要查询的是:

UPDATE gp_login SET deviceOS='$OS', device_id='$deviceID', id_updated_at=NOW() WHERE email='$email'

当然,当表中另一行的 device_id 已存在时,此操作会失败。

我尝试过使用 REPLACE,但它会删除行,并且行中还有其他不应丢失的数据。

设备 ID 虽然是唯一的,但不是表的主键。 该表是登录移动应用服务的移动用户帐户的列表。他们的设备 ID 已更新到其帐户行中,但仍然是唯一的。我想更新一行的设备 ID,即使另一个用户存在相同的设备 ID - 我只是希望首先将其设置为 null 以满足唯一约束。

最佳答案

评论太长了。

MySQL 中没有一个语句可以同时执行更新插入。您拥有的一个选项是插入触发器。您可以编写一个触发器来删除以前的设备 ID。

但是,我不确定这是否是一个好主意。为什么要忘记以前的设备 ID?例如,如果匿名用户访问该网站但未登录,它们似乎很有用。

关于mysql - 更新行的唯一字段并将现有行中的值设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42090303/

相关文章:

php - Moodle 从代码更新 mysql

mysql - 如何在 MYSQL 查询中指定空日期?

mysql - MATCH AGAINST 不适用于两个 LEFT JOIN : #1210 - Incorrect arguments to MATCH

mysql - SQL 查询 - 选择不同的类别和计数

sql - 更改或更新表后,row_overflow 数据未转换为 in_row 数据

mysql - 计算具有特定列的所有行并按周分组

php - 比较两个日期

jquery - 如何使用 Kendo UI Grid 加载远程数据?

sql - IF 语句而不是选择

sql查询,一季服用超过1个品种的总人数