```html
src="/upload/article/images/91.jpg" alt="图片描述都不一样">
我想把这个描述批量替换成指定的字段或者替换为空
src="/upload/article/images/91.jpg" alt="批量换成描述或者空">
该回答引用ChatGPT
mysql -u用户名 -p密码 数据库名
UPDATE le_drafts SET content = replace(content, 'alt="图片描述都不一样"', 'alt="批量换成描述或者空"');
UPDATE le_drafts SET content = replace(content, 'alt="图片描述都不一样"', 'alt=""');
exit;
该回答引用于ChatGPT:
你可以使用MySQL的UPDATE
语句和正则表达式来批量替换数据表 le_drafts
字段 content
里面图片所有alt的描述。以下是一个可能的解决方案:
UPDATE le_drafts SET content = REGEXP_REPLACE(content, '<img[^>]+alt="([^"]*)"[^>]*>', '<img alt="替换后的描述">', 1, 0, 'c')
WHERE content REGEXP '<img[^>]+alt="([^"]*)"[^>]*>';
这个SQL语句会在数据表le_drafts
中查询所有包含alt属性的图片标签,并使用正则表达式捕获其中的描述文本。然后,它会将每个匹配的描述替换为指定的字段或为空字符串。
如果你想将描述替换为空字符串,把<img alt="替换后的描述">
改成<img>
即可。
UPDATE le_drafts SET content = REGEXP_REPLACE(content, '<img(.*?)alt="(.*?)"(.*?)>', '<img$1alt="替换后的描述"$3>')
WHERE content REGEXP '<img(.*?)alt="(.*?)"(.*?)>';
将上述语句中的le_drafts
替换为您要操作的数据库表名,将content
替换为您要替换的字段名,将<img(.*?)alt="(.*?)"(.*?)>
替换为匹配您要替换的图片标签的正则表达式。
该语句会将每个图片的alt描述都替换成固定的描述。如果您需要对每个图片设置不同的描述,那么需要编写代码或使用其他工具实现。
在明确知道 alt 内容时,可以用 replace
如果批量替换不同的内容,可以使用正则
mysql 原生 regexp_replace 可以使用
select REGEXP_REPLACE('<img src="/upload/article/images/91.jpg" alt="图片描述都不一样">','(?<=alt=")[^"]+','-');
不知道你这个问题是否已经解决, 如果还没有解决的话:(1)索引的建立遵循最左前缀匹配原则。
(2)尽量考虑在where或order 不要后涉及的列上建立索引。
(3)建立索引的列必须是一个单独、独立的列,完全“干净”的列。不能存在任何运算。
(4)多列索引
①当出现多个索引做相交操作时(多个AND条件),通常来说一个包含所有相关列的索引要优于多个独立索引;
②当出现多个索引做联合操作时(多个OR条件),对结果集的合并、排序等操作需要耗费大量的CPU和内存资源,特别是当其中的某些索引的选择性不高,需要返回合并大量数据时,查询成本更高。所以这种情况下还不如走全表扫描。
(5)覆盖索引。如果一个索引包含或者说覆盖所有需要查询的字段的值,那么就没有必要再回表查询。