전체 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
워드 프레스 mysql 쿼리에서 이전 URL을 새 URL로 업데이트 :
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_posts SET post_excerpt = replace(post_excerpt, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
이것은 귀하의 데이터가 처음부터 정규화되지 않았 음을 의미합니다.
이와 같은 것이 작동합니다 (다른 언어를 사용하는 것에 대해 언급하지 않았으므로 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'
나는 가능하다면 이것을 피하려고 노력할 것입니다.
REPLACE 명령으로 대체 할 때주의하십시오!
왜?
데이터베이스에 직렬화 된 데이터 (특히 wp_options 테이블)가 포함될 가능성이 높기 때문에 "replace"만 사용하면 데이터가 손상 될 수 있습니다.
권장 직렬화 사용 : https://puvox.software/tools/wordpress-migrator
PHP로 작성된 매우 유용한 웹 기반 도구로 MySQL 데이터베이스에서 텍스트 문자열을 쉽게 검색하고 교체 할 수 있습니다.
이것은 불가능합니다. 각 테이블에 대해 개별적으로 UPDATE를 수행해야합니다.
경고 : 이중이지만 작동 할 것입니다 (아마도) 솔루션은 다음과 같습니다.
또는 mysqldump 를 통해 데이터베이스를 덤프 하고 결과 SQL 파일에서 검색 / 바꾸기를 수행 할 수 있습니다. (이 작업이 진행되는 동안 데이터베이스에 영향을 줄 수있는 모든 항목을 오프라인으로 설정하고 --add-drop-table 및 --extended-insert 플래그를 사용하는 것이 좋습니다.) 그러나 다음을 확인해야합니다. 검색 / 바꾸기 텍스트는 데이터 자체 외에는 아무것도 변경하지 않았으며 (즉, 교체하려는 텍스트가 SQL 구문의 일부로 발생하지 않을 수 있음) 실제로 다시 삽입하려고합니다. 먼저 빈 테스트 데이터베이스 .)
간단한 해결
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
phpMyAdmin에 있고 최소한의 변경 만있는 경우 쉬운 방법으로이를 수행 할 수 있습니다.
항상 모든 테이블 또는 임의의 테이블을 선택할 수 있습니다. 검색 키워드를 지정하는 것을 잊지 마십시오. 와일드 카드 (%)로 사용됩니다.
- 이제 이동을 클릭하십시오.
- 이렇게하면 검색 한 항목이있는 모든 테이블이 제공됩니다.
이제 각 테이블을 하나씩 열고 업데이트를 수행 할 수 있습니다. 생성 된 샘플 쿼리는 다음과 같습니다.
SELECT * FROM
sibeecst_passion
.wp_ewwwio_images
WHERE (CONVERT(id
USING utf8) LIKE '%sibee%' OR CONVERT(path
USING utf8) LIKE '%sibee%' OR CONVERT(image_md5
USING utf8) LIKE '%sibee%' OR CONVERT(results
USING utf8) LIKE '%sibee%' OR CONVERT(gallery
USING utf8) LIKE '%sibee%' OR CONVERT(image_size
USING utf8) LIKE '%sibee%' OR CONVERT(orig_size
USING utf8) LIKE '%sibee%' OR CONVERT(updates
USING utf8) LIKE '%sibee%' OR CONVERT(updated
USING utf8) LIKE '%sibee%' OR CONVERT(trace
USING utf8) LIKE '%sibee%' OR CONVERT(attachment_id
USING utf8) LIKE '%sibee%' OR CONVERT(resize
USING utf8) LIKE '%sibee%' OR CONVERT(converted
USING utf8) LIKE '%sibee%' OR CONVERT(level
USING utf8) LIKE '%sibee%' OR CONVERT(pending
USING utf8) LIKE '%sibee%' OR CONVERT(backup
USING utf8) LIKE '%sibee%')
I just wanted to share how I did this find/replace thing with sql database, because I needed to replace links from Chrome's sessionbuddy db file.
- So I exported sql database file as .txt file by using SQLite Database Browser 2.0 b1
- Find/replace in notepad++
- Imported the .txt file back on SQLite Database Browser 2.0 b1
Another option (depending on the use case) would be to use DataMystic's TextPipe and DataPipe products. I've used them in the past, and they've worked great in the complex replacement scenarios, and without having to export data out of the database for find-and-replace.
참고URL : https://stackoverflow.com/questions/4822638/find-and-replace-entire-mysql-database
'IT Share you' 카테고리의 다른 글
UITableViewCell 높이의 크기를 동적으로 조정하는 방법 (0) | 2020.12.13 |
---|---|
IIS7에서 사용할 수있는 기본 인증 선택 사항 없음 (0) | 2020.12.13 |
ASP MVC-기본 콘텐츠 형식에 대한 상수가 있습니까? (0) | 2020.12.13 |
명시 적 및 암시 적 C # (0) | 2020.12.13 |
주어진 두 문자열의 거리 유사성 측정을 계산하는 방법은 무엇입니까? (0) | 2020.12.13 |