下面考虑我的表,
register_device
id | user_id | device_id | status |
1 | 12 | 1234 | 1 |
2 | 1 | 5678 | 1 |
3 | 11 | 1456 | 1 |
触发逻辑:
在register_device表中插入值之前,我想检查register_device表中是否已存在新的device_id值。如果值已经存在,则在插入新值之前,需要将其状态更改为0,如下所示。
id | user_id | device_id | status |
1 | 12 | 1234 | 0 |
2 | 1 | 5678 | 1 |
3 | 11 | 1456 | 1 |
4 | 14 | 1234 | 1 |
因此,当我通过编码运行插入操作时,触发器需要在数据库中自己执行上述逻辑。
答案 0 :(得分:0)
由于以下几个原因,您当前的方法将很难实现插入逻辑:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
也不会飞,因为即使更新也发生,您实际上也想要插入记录我提出了一个略有不同的表格设计:
ON DUPLICATE KEY UPDATE
此处唯一的变化是id | user_id | device_id | status_timestamp
已成为status
,这是status_timestamp
列。您可以插入记录并使用timestamp
作为当前时间戳值。
从逻辑上讲,任何不的记录对于给定NOW()
的最大值status_timestamp
都会对应原始表中的零device_id
。具有给定status
的最大status_timestamp
值的记录将对应于device_id
的1。
例如,要获取status
1234的status = 1记录,您可以使用以下查询:
device_id
要获得SELECT *
FROM register_device
WHERE device_id = 1234
ORDER BY status_timestamp DESC
LIMIT 1
1234的所有状态= 0记录,您可以使用:
device_id