mysql怎么能不处理同时调用的两个插入请求?

时间:2017-07-01 13:56:26

标签: php mysql slim

我已经在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语句同时被调用两次,同一个用户记录被插入两次作为新用户,它重复记录。

0 个答案:

没有答案