Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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
带有REPLACE的update语句中的mysql大小写_Mysql_Replace_Case_Sql Update - Fatal编程技术网

带有REPLACE的update语句中的mysql大小写

带有REPLACE的update语句中的mysql大小写,mysql,replace,case,sql-update,Mysql,Replace,Case,Sql Update,我现在有这样的东西: UPDATE table1 SET column1 = REPLACE(column1, 'abc', 'abc1') WHERE column1 LIKE '%abc%'; UPDATE table1 SET column1 = REPLACE(column1, 'def', 'def1') WHERE column1 LIKE '%def%'; 我正在尝试将这些合并到单个update语句中,并尝试以下操作: UPDATE table1 SET column1 =

我现在有这样的东西:

UPDATE table1  SET column1 = REPLACE(column1, 'abc', 'abc1') WHERE column1 LIKE '%abc%';
UPDATE table1  SET column1 = REPLACE(column1, 'def', 'def1') WHERE column1 LIKE '%def%';
我正在尝试将这些合并到单个update语句中,并尝试以下操作:

UPDATE table1
SET column1 = 
CASE
WHEN column1 LIKE '%abc%' THEN REPLACE(column1, 'abc', 'abc1')
WHEN column1 LIKE '%def%' THEN REPLACE(column1, 'def', 'def1')
ELSE column1
END;

这是正确的做法吗?我是个新手。谢谢

由于您使用的是像“%abc%”这样的
,update语句将需要进行完整的表扫描。在这种情况下,将这两个语句结合起来将提高总体性能。但是,在您的建议中,每一行都会更新,并且大多数行都会在不更改的情况下更新(column1值将替换为column1值)

您希望确保保留
WHERE
子句,以便只更改真正需要更改的行。这种不必要的磁盘写入比检查行是否符合条件慢

这样做:

UPDATE table1
SET column1 = 
CASE
WHEN column1 LIKE '%abc%' THEN REPLACE(column1, 'abc', 'abc1')
WHEN column1 LIKE '%def%' THEN REPLACE(column1, 'def', 'def1')
END
WHERE column1 LIKE '%abc%' OR column1 LIKE '%def%';

总的来说,您使用的功能非常慢<代码>相似比
匹配慢。。。与
,这比相等比较慢<当速度也很慢时,代码>情况。也就是说,如果您有一个一直被访问的大型表,那么2个更新可能更方便,因为该表将在更短的时间内处于锁定状态。为什么要合并这2个更新语句?我想你最好还是做2次更新。问题是现在有20条语句,为了简单起见,我只放了2条。留下所有的个人陈述是否更好?好的,这是有道理的。谢谢你的澄清。哦,对了,我完全忘了在我的帖子中包含where(我的代码中确实包含了它!)不过还有一个问题:这只会在所有初始更新语句一开始都是互斥的情况下起作用,对吗?(即没有一行满足多个相似条件,因此每一行最多只能更新一次)@lolcat:没错。如果有一行匹配多个LIKE条件,它将只得到一个更新,即匹配的第一个情况。例如,如果您的值为“abcdef”,则它将更新为“abc1def”,而不是“abc1def1”。