我已经在php(用mysql作为数据库的slim框架)中创建了rest api来保存多个android应用程序用户的记录,所以当我们的应用程序被用户打开时,它调用寄存器api并发送参数来触发插入或更新操作
这是users
表
CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`app_code` varchar(255) NOT NULL,
`api_key` varchar(255) NOT NULL,
`device_id` varchar(100) NOT NULL,
`device_token` varchar(255) NOT NULL,
`device_model` varchar(50) NOT NULL,
`device_name` varchar(50) NOT NULL,
`device_memory` varchar(50) NOT NULL,
`device_os` varchar(100) NOT NULL,
`last_access` int(14) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2130346 ;
在插入记录api检查之前,如果用户已经使用两个参数app_code&设备编号 如果它的存在然后只更新用户的last_access(和device_token,如果它与前一个不同)字段并返回标志:2(用户已经存在) 更新查询看起来像这样
UPDATE users SET device_token='asadiwp0qidkqwdpkpka2',last_access='1498912512' WHERE id = '2132079'
如果用户不在,则返回标志:1(新用户)。 mysql insert查询看起来像这样
"INSERT INTO users(app_code, api_key, device_id, device_token,device_model, device_name, device_memory, device_os, last_access) values('YEVZ6I', 'b005e8a2babe0163a8eb4bfb2fe87b78', '66BBEG13B5F2G3EG', 'asadiwp0qidkqwdpkpka','Moto E3', 'Motorola E3 Power', '2GB', 'M', '1498912256')"
其中mendatory参数为“app_code,api_key,device_id,device_token”。
现在的问题是,目前我在同一时间同一时间从同一设备收到两次注册请求,所以mysql insert语句同时被调用两次,同一个用户记录被插入两次作为新用户,它重复记录。