我遇到了这种情况,并且正在尝试找出如何停止将重复数据插入数据库。
我有表log
并包含行:
device id , time (this is not the time insert but its the time the logs occur) , content
每个用户都可以通过其设备 ID 提交数据示例
123ABC , 2013-11-27 01:19:37 , sample text
每个用户最多可以使用 xml 协议(protocol)从设备提交 500 条日志。 因此,从控制面板页面,我可以选择用户(从此设备 ID)并查看他们提交的日志总数(不同的设备 ID、时间),这样我只能看到他们的唯一日志,例如 400 个唯一日志。 但在后端 mysql 中,它们有多达 2000 条记录日志,并且所有这些日志都从 400 条唯一日志中重复了 5 次。
我无法使设备 ID 唯一,因为 1 个设备可以提交多次,并且它将停止插入数据,因为每次都可以是相同的设备 ID。
我无法组合唯一的(设备 ID 和时间)。我认为这可行,但数据根本不会插入;它拒绝我的查询。每个数据都有唯一的时间、内容,但没有设备 ID...
我怎样才能做到这一点?
如果我希望每个用户继续提交数据日志,但不重复提交,并且仅提交来自同一设备 ID 的唯一数据日志。
如果我仅选择时间和内容作为唯一索引。如果多个设备同时提交日志并且内容相同,有时会失败...
如何使其对于每个设备 ID 都是唯一的,而不是其他设备 ID。
最佳答案
我不明白为什么两列上的常规复合唯一索引不起作用;
CREATE TABLE logs (
log_id INT AUTO_INCREMENT PRIMARY KEY,
device_id VARCHAR(32),
time DATETIME,
content VARCHAR(32)
);
CREATE UNIQUE INDEX uq_logs ON logs (device_id, time);
-- First insert
INSERT INTO logs (device_id, time, content) VALUES
('123ABC', '2013-11-27 01:19:37', 'sample text');
-- New time, ok
INSERT INTO logs (device_id, time, content) VALUES
('123ABC', '2013-11-27 01:19:47', 'sample text');
-- Duplicate of #1, fails
INSERT INTO logs (device_id, time, content) VALUES
('123ABC', '2013-11-27 01:19:37', 'sample text');
关于php - Mysql主键和唯一键(防止重复数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20580963/