Trở lại vào tháng 7 năm 2012 tôi đã viết bài đăng này
Truy vấn để tìm và thay thế văn bản trong tất cả các bảng và trường của một mys mys db
Nó sử dụng bảng information_schema.columns để chọn mọi trường CHAR, VARCHAR và TEXT và thực hiện REPLACE văn bản .
Vui lòng xem qua liên kết cũ của tôi và sử dụng mô hình của nó để thực hiện tìm kiếm.
Ví dụ, điều này sẽ tạo một CHỌN riêng cho từng cột văn bản trong mỗi bảng
SELECT
CONCAT('SELECT ',QUOTE(db),',',QUOTE(tb),',',QUOTE(col),',COUNT(1) FieldHasIt
FROM ',db,'.',tb,' WHERE \`',col,'\`=''',SearchString,''';') SearchSQL
FROM
(
SELECT table_schema db,table_name tb,column_name col FROM information_schema.columns
WHERE table_schema = 'mydb' AND
(column_type LIKE 'char(%' OR column_type LIKE 'varchar(%' OR column_type LIKE '%text')
) A,(SELECT 'Hello' SearchString) B;
Tạo một tệp văn bản SQL khổng lồ với nó. Sau đó, thực thi tập lệnh SQL khổng lồ đó:
SQL="SELECT CONCAT('SELECT ',QUOTE(db),',',QUOTE(tb),',',"
SQL="${SQL} QUOTE(col),',COUNT(1) FieldHasIt FROM ',db,'.',tb,'"
SQL="${SQL} WHERE \`',col,'\`=''',SearchString,''';') SearchSQL FROM"
SQL="${SQL} (SELECT table_schema db,table_name tb,column_name col FROM"
SQL="${SQL} information_schema.columns WHERE table_schema='store_qa'"
SQL="${SQL} AND (column_type LIKE 'char(%' OR column_type LIKE 'varchar(%'"
SQL="${SQL} OR column_type LIKE '%text')) A,(SELECT 'Hello' SearchString) B;"
mysql -uroot -p... -ANe"${SQL}" > MegaSearch.sql
mysql -uroot -p... -AN < MegaSearch.sql > MegaSearchResults.txt
RESULTS_FOUND=`grep -c "1$" < MegaSearchResults.txt`
echo ${RESULTS_FOUND}
if [ ${RESULTS_FOUND} -gt 0 ] ; then grep "1$" < MegaSearchResults.txt ; fi
Đầu ra cho bạn biết Cơ sở dữ liệu, Bảng và Cột mà dữ liệu xuất hiện.
Hãy thử một lần !!!.
CHỈNH SỬA:
CONCAT('SELECT ',QUOTE(db),',',QUOTE(tb),',',QUOTE(col),',COUNT(1) FieldHasIt
FROM ',db,'.',tb,' WHERE \`',col,'\`=''',SearchString,''';')
NÊN: thêm hai dấu tick phía sau hiển thị bên dưới cho các bảng có khoảng trắng trong tên.
db,'.`',tb,'`',' WHERE