[mysql] MySQL 쿼리를 사용하여 전체 테이블에서 텍스트 찾기 및 바꾸기

일반적으로 phpmyadmin을 사용하여 MySQL 데이터베이스의 텍스트를 바꾸려면 수동 찾기를 사용합니다. 나는 지금 피곤합니다 .phpmyadmin의 전체 테이블에서 텍스트를 찾아 새로운 텍스트로 바꾸는 쿼리를 어떻게 실행할 수 있습니까?

예 : 키워드 찾기 domain.com,로 교체하십시오 www.domain.com.



답변

A에 대한 single table갱신

 UPDATE `table_name`
 SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')

부터 multiple tables

모든 테이블에서 편집 할 경우, 가장 좋은 방법은 걸릴 것입니다 dump다음 find/replace다시 업로드합니다.


답변

내가 찾은 가장 쉬운 방법은 데이터베이스를 텍스트 파일로 덤프하고 sed 명령을 실행하여 교체를 수행 한 다음 데이터베이스를 MySQL로 다시로드하는 것입니다.

아래의 모든 명령은 Linux에서 bash입니다.

데이터베이스를 텍스트 파일로 덤프

mysqldump -u user -p databasename > ./db.sql

sed 명령을 실행하여 대상 문자열 찾기 / 바꾸기

sed -i 's/oldString/newString/g' ./db.sql

데이터베이스를 MySQL로 다시로드

mysql -u user -p databasename < ./db.sql

쉬워요.


답변

이것을 PHP 파일에 넣고 실행하면 원하는 작업을 수행해야합니다.

// Connect to your MySQL database.
$hostname = "localhost";
$username = "db_username";
$password = "db_password";
$database = "db_name";

mysql_connect($hostname, $username, $password);

// The find and replace strings.
$find = "find_this_text";
$replace = "replace_with_this_text";

$loop = mysql_query("
    SELECT
        concat('UPDATE ',table_schema,'.',table_name, ' SET ',column_name, '=replace(',column_name,', ''{$find}'', ''{$replace}'');') AS s
    FROM
        information_schema.columns
    WHERE
        table_schema = '{$database}'")
or die ('Cant loop through dbfields: ' . mysql_error());

while ($query = mysql_fetch_assoc($loop))
{
        mysql_query($query['s']);
}


답변

mysite.com/wordpress 찾기 및 mysite.com/news로 바꾸기와 같은 모든 wordpress 블로그 게시물에서 텍스트를 찾아서 바꾸기 위해 PHPmyadmin에서 SQL 쿼리를 실행합니다.이 예제에서 tj_posts

UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')


답변

다른 옵션은 데이터베이스의 각 열에 대한 명령문을 생성하는 것입니다.

SELECT CONCAT(
    'update ', table_name , 
    ' set ', column_name, ' = replace(', column_name,', ''www.oldDomain.com'', ''www.newDomain.com'');'
) AS statement
FROM information_schema.columns
WHERE table_schema = 'mySchema' AND table_name LIKE 'yourPrefix_%';

그러면 실행할 수있는 업데이트 문 목록이 생성됩니다.


답변

 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

예를 들어, John의 모든 발생을 Mark로 바꾸려면 아래에서 사용합니다.

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');


답변

phpMyAdmin에는 깔끔한 찾기 및 바꾸기 도구가 포함되어 있습니다.

테이블을 선택한 다음 검색 > 찾기 및 바꾸기 를 누르 십시오.

이 쿼리는 분 걸렸다 성공적으로 수천 개의 인스턴스를 대체 oldurl.extnewurl.ext열 내post_content

phpMyAdmin에서 찾기 및 바꾸기 기능의 스크린 샷

이 방법의 가장 좋은 점 : 커밋하기 전에 모든 경기를 확인하십시오.

NB phpMyAdmin 4.9.0.1을 사용하고 있습니다