Mysql 如何使用新值更改/更新图像路径的起始字符
我有一张这样的桌子:Mysql 如何使用新值更改/更新图像路径的起始字符,mysql,string,Mysql,String,我有一张这样的桌子: CREATE TABLE user_post ( id int(30) , user_id int(11), text mediumtext, image_path varchar(4000) , video_path varchar(4000) , created_date timestamp NULL DEFAULT NULL, ) 62197/Files/1582028253362.jpg https://
CREATE TABLE user_post (
id int(30) ,
user_id int(11),
text mediumtext,
image_path varchar(4000) ,
video_path varchar(4000) ,
created_date timestamp NULL DEFAULT NULL,
)
62197/Files/1582028253362.jpg
https://s3-**********-1.amazonaws.com//abccdn/1582285090974.jpg
SELECT SUBSTRING_INDEX(image_path, '/', -1)
在此表中,我们存储图像路径。之前我们没有使用CDN,所以我们的映像路径如下所示:
CREATE TABLE user_post (
id int(30) ,
user_id int(11),
text mediumtext,
image_path varchar(4000) ,
video_path varchar(4000) ,
created_date timestamp NULL DEFAULT NULL,
)
62197/Files/1582028253362.jpg
https://s3-**********-1.amazonaws.com//abccdn/1582285090974.jpg
SELECT SUBSTRING_INDEX(image_path, '/', -1)
但现在使用CDN后,图像路径发生了变化,如下所示:
CREATE TABLE user_post (
id int(30) ,
user_id int(11),
text mediumtext,
image_path varchar(4000) ,
video_path varchar(4000) ,
created_date timestamp NULL DEFAULT NULL,
)
62197/Files/1582028253362.jpg
https://s3-**********-1.amazonaws.com//abccdn/1582285090974.jpg
SELECT SUBSTRING_INDEX(image_path, '/', -1)
现在我想更改旧的图像路径,它应该以https://
开头。我不想一个图像一个图像地手动更改
有脚本吗?确定您可以像这样更新:
SET @var_starts_with := 'https://';
UPDATE user_post
SET image_path := CONCAT(@var_starts_with, image_path)
WHERE image_path NOT LIKE CONCAT(@var_starts_with, '%')
;
确定您可以像这样更新:
SET @var_starts_with := 'https://';
UPDATE user_post
SET image_path := CONCAT(@var_starts_with, image_path)
WHERE image_path NOT LIKE CONCAT(@var_starts_with, '%')
;
可以,您可以使用查询来更新这些值 首先,您需要一些逻辑来将
62197/Files/1582028253362.jpg
之类的值转换为1582028253362.jpg
尝试使用以下类似的方法:
CREATE TABLE user_post (
id int(30) ,
user_id int(11),
text mediumtext,
image_path varchar(4000) ,
video_path varchar(4000) ,
created_date timestamp NULL DEFAULT NULL,
)
62197/Files/1582028253362.jpg
https://s3-**********-1.amazonaws.com//abccdn/1582285090974.jpg
SELECT SUBSTRING_INDEX(image_path, '/', -1)
在你的一些数据上运行这个命令,让自己相信它是有效的
然后执行类似这样的更新操作
UPDATE user_post
SET image_path = CONCAT(
'https://s3-**********-1.amazonaws.com//abccdn/',
SUBSTRING_INDEX(image_path, '/', -1))
WHERE image_path NOT LIKE 'https://s3-%'
SELECT * FROM user_post_cdn WHERE id = whatever;
请注意,旧路径以数字开头,如62197/Files…
我给您的逻辑消除了这些数字。这可能对你的情况正确,也可能不对:你应该检查一下
还有另外一件事要考虑。如果可以,请更改用于检索这些image\u path
值的SELECT查询,使其返回CDN的路径保持表中的图像路径
值不变,并在检索时对其进行操作。然后,如果CDN装备中的某些内容发生更改,您可以只更改SELECT查询。这样做的一个好方法可能是创建一个视图,并在检索记录时使用它。像这样:
CREATE OR REPLACE VIEW user_post_cdn AS
SELECT id, user_id, text,
CONCAT('https://s3-**********-1.amazonaws.com//abccdn/',
SUBSTRING_INDEX(image_path, '/', -1)) image_path,
video_path, created_date
FROM user_post;
然后,当您需要数据库中的cdn路径时,可以这样说
UPDATE user_post
SET image_path = CONCAT(
'https://s3-**********-1.amazonaws.com//abccdn/',
SUBSTRING_INDEX(image_path, '/', -1))
WHERE image_path NOT LIKE 'https://s3-%'
SELECT * FROM user_post_cdn WHERE id = whatever;
这边
- 更新图像路径数据不会有损坏图像路径数据的风险
- 如果您的CDN设置发生了变化,您只需更改视图定义,一切都将继续工作
62197/Files/1582028253362.jpg
之类的值转换为1582028253362.jpg
尝试使用以下类似的方法:
CREATE TABLE user_post (
id int(30) ,
user_id int(11),
text mediumtext,
image_path varchar(4000) ,
video_path varchar(4000) ,
created_date timestamp NULL DEFAULT NULL,
)
62197/Files/1582028253362.jpg
https://s3-**********-1.amazonaws.com//abccdn/1582285090974.jpg
SELECT SUBSTRING_INDEX(image_path, '/', -1)
在你的一些数据上运行这个命令,让自己相信它是有效的
然后执行类似这样的更新操作
UPDATE user_post
SET image_path = CONCAT(
'https://s3-**********-1.amazonaws.com//abccdn/',
SUBSTRING_INDEX(image_path, '/', -1))
WHERE image_path NOT LIKE 'https://s3-%'
SELECT * FROM user_post_cdn WHERE id = whatever;
请注意,旧路径以数字开头,如62197/Files…
我给您的逻辑消除了这些数字。这可能对你的情况正确,也可能不对:你应该检查一下
还有另外一件事要考虑。如果可以,请更改用于检索这些image\u path
值的SELECT查询,使其返回CDN的路径保持表中的图像路径
值不变,并在检索时对其进行操作。然后,如果CDN装备中的某些内容发生更改,您可以只更改SELECT查询。这样做的一个好方法可能是创建一个视图,并在检索记录时使用它。像这样:
CREATE OR REPLACE VIEW user_post_cdn AS
SELECT id, user_id, text,
CONCAT('https://s3-**********-1.amazonaws.com//abccdn/',
SUBSTRING_INDEX(image_path, '/', -1)) image_path,
video_path, created_date
FROM user_post;
然后,当您需要数据库中的cdn路径时,可以这样说
UPDATE user_post
SET image_path = CONCAT(
'https://s3-**********-1.amazonaws.com//abccdn/',
SUBSTRING_INDEX(image_path, '/', -1))
WHERE image_path NOT LIKE 'https://s3-%'
SELECT * FROM user_post_cdn WHERE id = whatever;
这边
- 更新图像路径数据不会有损坏图像路径数据的风险
- 如果您的CDN设置发生了变化,您只需更改视图定义,一切都将继续工作