Php SQL-现有数据的验证
我有一个脚本总是验证行是否存在,这取决于对事件的调整 例如:Php SQL-现有数据的验证,php,mysql,sql,database,Php,Mysql,Sql,Database,我有一个脚本总是验证行是否存在,这取决于对事件的调整 例如: if(exists($row)){ // update }else{ // insert } 插入查询: INSERT INTO table (name, value) VALUES ('...', '1'), ('...', '2'), ('...', '3'), ('...', '4'), ('...', '5'), //...100x 更新查询:
if(exists($row)){
// update
}else{
// insert
}
插入查询:
INSERT INTO table (name, value) VALUES
('...', '1'),
('...', '2'),
('...', '3'),
('...', '4'),
('...', '5'),
//...100x
更新查询:
UPDATE table
SET value = CASE uuid
WHEN 'x' THEN 1
WHEN 'y' THEN 2
END,
SET value1 = CASE uuid
WHEN 'x' THEN 1
WHEN 'y' THEN 2
END
WHERE uuid IN ('x','y')
数据非常多,请验证记录是否存在足够长的时间。因为执行必要的500倍或更多
存在方法:
SELECT id FROM table WHERE uuid=Y;
是否有可能以某种方式加快脚本的速度?是否可以验证直接添加到查询中的现有数据
我可以只使用一个查询创建+更新+检查现有吗
谢谢你的帮助
Updating and adding data with verification : 27-40 SEC
Updating and adding data WITHOUT verification: 1-5 SEC
编辑:我正在从另一台服务器获取数据,如json示例脚本:
$data = json_decode($_POST["data"]);
foreach($data as value){
// value is an array
if(exists($value["uuid"])){
$this->appendUpdate($value); // building the update query
}else{
$this->appendInsert($value); // building the insert query
}
}
$this->insert(); // for example: 30 inserts in 1 query
$this->update(); // for example: 500 updates in 1 query
这个表中只有300-2000行(我不明白为什么需要这么长时间)
编辑2:
这可能是我的解决方案:
INSERT INTO test (uuid, value) VALUES
('aaa', 1),
('bbb', 2),
('ccc', 3)
ON DUPLICATE KEY UPDATE
value = (
IF(uuid='aaa', 4, IF(uuid='bbb', 5, IF(uuid='ccc', 6, value)))
);
我将尝试运行brisk服务器,然后触摸。确保列uuid具有唯一索引,您可以执行以下查询
INSERT INTO table (a,b) VALUES (1,2)
ON DUPLICATE KEY UPDATE b=4;
大概是这样的:
INSERT INTO table(name,value)
SELECT table2name as name, table2value as value FROM table2
WHERE uuid IS NULL;
如果可以,请使用“选择然后插入”创建表视图。您是从数据库本身获取insert数据,还是完全拥有本地数据?insert ignore。。。关于重复的更新内容?ask已更新@MotsimI将使用1)事务。2) 循环外的准备好的查询。我想会很快。尤其是使用
insert。。重复时…
查询。编写代码也很容易。我不能使用UUID作为主键,因为主键是“ID”-UUID只是另一台服务器中的主键-不是我的。唯一索引不是主键。它们非常相似,但每个表可以有多个唯一的索引,所以这应该不是问题。aaaaa-hmmm它可能正在工作(在不同的测试表上),我将尝试在实际脚本中工作@MarcHoHBut,我只需要一个查询,而不是像这样的1000次插入,它可能会像验证一样缓慢。有没有办法在一个问题上解决这个问题?像这样@MarcHoHIt可以使用多个插入,例如:在重复键更新b=5时将值(1,2)、(2,4)插入到表(a,b)中。但就像普通的update语句一样,在重复密钥更新时只能有一个。