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设置发生了变化,您只需更改视图定义,一切都将继续工作