我试图通过使用像这样的语句来更新表中大约20,000条记录,
但是,我收到消息说0 row(s) affected
所以它没有用。
UPDATE nc_files SET title ="Worklog details" WHERE "log_name" LIKE "%PC01%"
log_name
字段包含所有带有混合文件扩展名和案例的文件名,例如。
PC01.TXT | Worklog details
PC02.txt | Project Summary
PC03.DOC| Worklog details
PC04.doc| Project Summary
我需要使用LIKE
的原因是更新的文件只有没有扩展名的文件名,例如。
PC01 | Worklog details
PC02 | Project Summary
如何使用LIKE
更新记录?
答案 0 :(得分:9)
log_name
是一个字段名称,从中删除文字引号 -
UPDATE nc_files SET title ="Worklog details" WHERE log_name LIKE "%PC01%"
答案 1 :(得分:2)
这是因为您的列名log_name
不应该在'
引号中。
"log_name" LIKE "%PC01%"
条件将始终失败,零行将更新,请尝试以下操作:
UPDATE nc_files
SET title ="Worklog details"
WHERE log_name LIKE "%PC01%";
答案 2 :(得分:1)
默认情况下,MySQL允许将双引号名称理解为 标识符(如列名)或字符串文字。
这是为了方便,但我发现语义歧义令人沮丧。 MySQL必须解决这种模糊性,并且不能像你发现的那样神奇地总是猜测编码器的意图。
-- In default sql_mode under 5.5
--
SELECT "foo" -- "foo" is a *column* if tbl.foo exists, otherwise a string
FROM "tbl" -- Oops! ER_PARSE_ERROR (1064) Can't do this in default mode.
WHERE "foo" = "foo"; -- Both of these are strings
因此,绕过它的方法是强制明确解释标识符:
sql_mode
以包含ANSI_QUOTES(或其超集)。双引号则专门用于标识符,单引号用于字符串。#3是我个人的最爱,可读性和便携性。问题是它往往会让只知道MySQL的人大吃一惊,你必须记住覆盖默认值。
答案 3 :(得分:0)
"log_name" should not be in quotes
答案 4 :(得分:0)
正在寻找同样但对我不起作用.... 但这很完美:
$title = "Worklog details";
$log_name = 'PC01';
$update = $connection -> prepare("UPDATE nc_files
SET title = ?
WHERE log_name = ?");
$update->bind_param('ss',$title,$log_name);
$update->execute();
$update->close();
答案 5 :(得分:0)
我遇到了类似的麻烦。问题是引号“ 我修改了我的代码如下。
更新表SET Table.Field =“myreplace” WHERE(((Table.Field)赞'%A-16%'));
此致,Alexwin1982
答案 6 :(得分:0)
尝试替换关键字
UPDATE nc_files
SET title
= REPLACE(title
,'PC01','Worklog详细信息')WHERE log_name喜欢'%PC01%'