Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换为表mysql查询的替代方法_Mysql_Replace - Fatal编程技术网

替换为表mysql查询的替代方法

替换为表mysql查询的替代方法,mysql,replace,Mysql,Replace,我通常每天通过以下查询将数据从表A复制到tabelB中: REPLACE INTO tableB (id,col1,col2,col3) SELECT id,col1,col2,col3 FROM tableA WHERE date='somedate' 这里使用REPLACE,就好像脚本在某个特定日期错误地运行了两次一样,它不会将tableA复制两次到tableB中。但问题是,tableB有两个唯一的键索引(id和col1)。所以,若多次执行REPLACE,那个么这个REPLACE命令将删除

我通常每天通过以下查询将数据从表A复制到tabelB中:

REPLACE INTO tableB (id,col1,col2,col3) SELECT id,col1,col2,col3 FROM tableA WHERE date='somedate'
这里使用REPLACE,就好像脚本在某个特定日期错误地运行了两次一样,它不会将tableA复制两次到tableB中。但问题是,tableB有两个唯一的键索引(id和col1)。所以,若多次执行REPLACE,那个么这个REPLACE命令将删除并重新创建索引。为了避免这种情况,我想使用:

INSERT INTO tableB (id,col1,col2,col3) VALUES (val1,val2,val3,val4) ON DUPLICATE KEY UPDATE col2=VALUES(col2),col3=VALUES(col3)
但是,由于我在这里复制tableA,我不能使用上面的INSERT…。在重复密钥更新查询中,我必须使用SELECT命令从tableA复制数据

那么如何将INSERT修改为。。。。。。。。。。。在重复键更新查询上,这样它就可以复制tableA,同时如果多次执行脚本,它只更新数据


请尝试此插入查询-

INSERT INTO tableB (id, col1, col2, col3)
  SELECT id, col1, col2, col3 FROM tableA WHERE date = 'somedate'
ON DUPLICATE KEY UPDATE col2 = VALUES(col2), col3 = VALUES(col3);
你看到了吗