전체 MySQL 데이터베이스 찾기 및 바꾸기
테이블뿐만 아니라 전체 데이터베이스 내에서 검색 및 치환을 하고 싶습니다.
아래 스크립트를 작동하도록 변경하려면 어떻게 해야 합니까?
update [table_name] set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]');
아스타리스크만 쓰면 되나요?
update * set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]');
sqldump를 텍스트 파일로 변환하고 sqldump를 검색/바꾸고 다시 가져옵니다.
데이터베이스를 텍스트 파일로 덤프합니다.
mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql
데이터베이스를 변경한 후 복원하십시오.
mysql -u root -p[root_password] [database_name] < dumpfilename.sql
WordPress MySQL 쿼리에서 이전 URL을 새 URL로 업데이트:
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.example', 'http://newdomain.example') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.example','http://newdomain.example');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.example', 'http://newdomain.example');
UPDATE wp_posts SET post_excerpt = replace(post_excerpt, 'http://olddomain.example', 'http://newdomain.example');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.example', 'http://newdomain.example');
REPLACE 명령으로 교체할 때는 주의하십시오!
왜요?
데이터베이스에 시리얼화된 데이터(특히 wp_parames 테이블)가 포함되어 있을 가능성이 높기 때문에 "대체"만 사용하면 데이터가 파손될 수 있습니다.
권장 직렬화 사용: https://puvox.software/tools/wordpress-migrator
이는 데이터가 처음부터 정규화되지 않았음을 강하게 시사합니다.
이와 같은 기능이 작동해야 합니다(다른 언어를 사용하는 것에 대해 언급하지 않은 NB는 MySQL 저장 프로시저로 작성됩니다.
create procedure replace_all(find varchar(255),
replce varchar(255),
indb varcv=char(255))
DECLARE loopdone INTEGER DEFAULT 0;
DECLARE currtable varchar(100);
DECLARE alltables CURSOR FOR SELECT t.tablename, c.column_name
FROM information_schema.tables t,
information_schema.columns c
WHERE t.table_schema=indb
AND c.table_schema=indb
AND t.table_name=c.table_name;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET loopdone = 1;
OPEN alltables;
tableloop: LOOP
FETCH alltables INTO currtable, currcol;
IF (loopdone>0) THEN LEAVE LOOP;
END IF;
SET stmt=CONCAT('UPDATE ',
indb, '.', currtable, ' SET ',
currcol, ' = word_sub(\'', find,
'\','\'', replce, '\') WHERE ',
currcol, ' LIKE \'%', find, '%\'');
PREPARE s1 FROM stmt;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END LOOP;
END //
word_sub 함수를 선언하는 방법은 당신에게 맡기겠습니다.
간단한 답변:그럴수는 없어요.
장황한 답변:INFORMATION_SCHEMA를 사용하여 테이블 정의를 가져오고 이를 사용하여 필요한 UPDATE 문을 동적으로 생성할 수 있습니다.예를 들어 다음과 같이 시작할 수 있습니다.
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_schema'
가능하다면 이 일을 피하려고 합니다.
MySQL 데이터베이스에서 텍스트 문자열을 쉽게 검색하고 바꿀 수 있는 매우 유용한 웹 기반 도구입니다.
MySQL에서도 같은 문제가 발생하였습니다.나는 symcbean의 시술을 받아 그녀를 내 필요에 맞게 개조했다.
저는 텍스트 값(또는 SELECT FROM information_schema에 입력한 모든 유형)만 치환하고 있기 때문에 날짜 필드가 있는 경우 실행 시 오류가 발생하지 않습니다.
SET @stmt 내의 대조는 데이터베이스 대조와 일치해야 합니다.
여러 개의 치환이 있는 변수에서 템플릿 요청을 사용했지만 동기 부여가 있다면 CONCAT() 하나로 할 수 있습니다.
어쨌든 데이터베이스에 직렬화된 데이터가 있는 경우 이를 사용하지 마십시오.같은 lenight의 문자열로 대체하지 않으면 동작하지 않습니다.
도움이 됐으면 좋겠는데
DELIMITER $$
DROP PROCEDURE IF EXISTS replace_all_occurences_in_database$$
CREATE PROCEDURE replace_all_occurences_in_database (find_string varchar(255), replace_string varchar(255))
BEGIN
DECLARE loop_done integer DEFAULT 0;
DECLARE current_table varchar(255);
DECLARE current_column varchar(255);
DECLARE all_columns CURSOR FOR
SELECT
t.table_name,
c.column_name
FROM information_schema.tables t,
information_schema.columns c
WHERE t.table_schema = DATABASE()
AND c.table_schema = DATABASE()
AND t.table_name = c.table_name
AND c.DATA_TYPE IN('varchar', 'text', 'longtext');
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET loop_done = 1;
OPEN all_columns;
table_loop:
LOOP
FETCH all_columns INTO current_table, current_column;
IF (loop_done > 0) THEN
LEAVE table_loop;
END IF;
SET @stmt = 'UPDATE `|table|` SET `|column|` = REPLACE(`|column|`, "|find|", "|replace|") WHERE `|column|` LIKE "%|find|%"' COLLATE `utf8mb4_unicode_ci`;
SET @stmt = REPLACE(@stmt, '|table|', current_table);
SET @stmt = REPLACE(@stmt, '|column|', current_column);
SET @stmt = REPLACE(@stmt, '|find|', find_string);
SET @stmt = REPLACE(@stmt, '|replace|', replace_string);
PREPARE s1 FROM @stmt;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END LOOP;
END
$$
DELIMITER ;
이 작업은 불가능합니다. 각 테이블에 대해 개별적으로 업데이트를 수행해야 합니다.
경고: 의심스럽지만 효과가 있습니다(PROBAB).LY) 솔루션은 다음과 같습니다.
또는 mysqldump를 통해 데이터베이스를 덤프하고 결과 SQL 파일에 대해 검색/교체를 수행할 수 있습니다(이 작업이 진행 중일 때 데이터베이스에 영향을 줄 수 있는 모든 항목과 --add-drop-table 및 --extended-insert 플래그를 사용할 것을 권장합니다).그러나 검색/바꾸기 텍스트가 데이터 자체 이외의 다른 것을 변경하지 않는지 확인해야 합니다(즉, 스왑 아웃하려는 텍스트가 SQL 구문의 일부로 표시되지 않을 수 있습니다). 먼저 빈 테스트 데이터베이스에서 다시 삽입을 시도합니다).
심플한 솔루션
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
phpMyAdmin에서 최소한의 변경만 있으면 쉽게 변경할 수 있습니다.
모든 테이블 또는 임의의 테이블을 언제든지 선택할 수 있습니다.검색 키워드를 지정하는 것을 잊지 말아 주세요.이 키워드는 와일드카드(%)로 사용됩니다.
- [Go]를 클릭합니다.
- 그러면 검색한 항목이 있는 모든 테이블이 표시됩니다.
이제 각 테이블을 하나씩 열고 업데이트를 수행할 수 있습니다. 생성된 샘플 쿼리는 다음과 같습니다.
* FROM 택 * select
sibeecst_passion
.wp_ewwwio_images
변환id
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。path
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。image_md5
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。results
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。gallery
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。image_size
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。orig_size
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。updates
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。updated
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。trace
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。attachment_id
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。resize
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。converted
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。level
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。pending
'% CONVERTutf8) '%sibee%'( ) '( ) 를)을 。backup
LIKE '%utf8) '%sibee%' ★
사용 사례에 따라 다른 옵션은 DataMystic의 TextPipe 및 DataPipe 제품을 사용하는 것입니다.이전에 사용한 적이 있는데, 복잡한 교체 시나리오에서 데이터를 데이터베이스에서 내보내지 않고도 검색 및 교환이 가능합니다.
Chrome의 sessionbuddy db 파일에 있는 링크를 대체해야 했기 때문에 sql 데이터베이스와 이 찾기/바꾸기를 어떻게 했는지 공유하려고 합니다.
- 그래서 SQLite Database Browser 2.0 b1을 사용하여 SQL 데이터베이스 파일을 .txt 파일로 내보냈습니다.
- 메모장에서 찾기/바꾸기++
- SQLite Database Browser 2.0 b1에서 .txt 파일을 Import.
언급URL : https://stackoverflow.com/questions/4822638/find-and-replace-entire-mysql-database
'programing' 카테고리의 다른 글
메이븐의 MOJO가 뭐죠? (0) | 2022.10.22 |
---|---|
URL 주소를 5분마다 실행하는 CRON 명령어 (0) | 2022.10.22 |
Laravel Project가 모든 루트에 HTTPS를 사용하도록 강제하려면 어떻게 해야 합니까? (0) | 2022.10.22 |
복합 기본 키를 추가하기 위한 ALTER TABLE (0) | 2022.10.22 |
JavaScript를 사용하여 쉼표로 구분된 문자열을 분할하려면 어떻게 해야 합니까? (0) | 2022.10.22 |