2012-01-02 3 views
2

우리는 엄격하지 않은 모드에서 mysql 데이터베이스를 strict_all_tables로 이동하며 모든 데이터베이스와 테이블에서 유효하지 않은 날짜 (0000-00-00)를 가진 기존의 모든 행을 찾고 싶습니다. 우리 서버에. 명령이나 다른 간단한 방법으로이 작업을 수행 할 수 있습니까?mysql 데이터베이스에서 유효하지 않은 0000-00-00 날짜 찾기

0000-00-00 값이 존재하는 데이터베이스와 테이블 이름을 알고 싶습니다. 열 이름은 더하기 일 수 있습니다.

우리는 많은 양의 데이터를 포함하고있는 많은 수의 데이터베이스를 보유하고 있으며, 일부는 많은 양의 데이터를 포함하므로 더 많은 방법이 자동으로 더 좋습니다.

답변

3

http://code.google.com/p/anywhereindb/ 또는이 http://forge.mysql.com/tools/tool.php?id=232

mikkom 편집하려고 : (forge.mysql 당신 Thanky

#kedar.nitty-witty.com 

## Table for storing resultant output 
DROP TABLE IF EXISTS `temp_details`; 
CREATE TABLE `temp_details` ( 
`t_schema` varchar(45) NOT NULL, 
`t_table` varchar(45) NOT NULL, 
`t_field` varchar(45) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 



## Procedure for search in all fields of all databases 
DELIMITER $$ 
#Script to loop through all tables using Information_Schema 
DROP PROCEDURE IF EXISTS get_table $$ 
CREATE PROCEDURE get_table(in_search varchar(50)) 
READS SQL DATA 
BEGIN 
DECLARE trunc_cmd VARCHAR(50); 
DECLARE search_string VARCHAR(250); 
DECLARE db,tbl,clmn CHAR(50); 
DECLARE done INT DEFAULT 0; 
DECLARE COUNTER INT; 
DECLARE table_cur CURSOR FOR 
SELECT concat('SELECT COUNT(*) INTO @CNT_VALUE FROM `',table_schema,'`.`',table_name,'` WHERE `', column_name,'` REGEXP "',in_search,'"') ,table_schema,table_name,column_name FROM information_schema.COLUMNS WHERE TABLE_SCHEMA NOT IN ('information_schema','test','mysql'); 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; 
#Truncating table for refill the data for new search. 
PREPARE trunc_cmd FROM "TRUNCATE TABLE temp_details;"; 
EXECUTE trunc_cmd ; 
OPEN table_cur; 
table_loop:LOOP 
FETCH table_cur INTO search_string,db,tbl,clmn; 
#Executing the search 
SET @search_string = search_string; 
##SELECT search_string; 
PREPARE search_string FROM @search_string; 
EXECUTE search_string; 
SET COUNTER = @CNT_VALUE; 
##SELECT COUNTER; 
IF COUNTER>0 THEN 
# Inserting required results from search to table 
INSERT INTO temp_details VALUES(db,tbl,clmn); 
END IF; 
IF done=1 THEN 
LEAVE table_loop; 
END IF; 
END LOOP; 
CLOSE table_cur; 
#Finally Show Results 
SELECT * FROM temp_details; 
END $$ 
DELIMITER ; 
+0

, 절차 버전 : 다음의 경우에서 복사 한 실제 스크립트가 외부 소스에서 어떤 일을 사라집니다 .com 링크) 내가 원하는대로 작동하는 것 같습니다. – mikkom

+0

문제 없습니다. 기꺼이 도와 드리겠습니다. – redmoon7777

+0

[여기에 프로 시저 sql을 만드는 빠른 직접 링크가 있습니다] (http://kedar.nitty-witty.com/blog/wp-content/uploads/2009/10/find-in-all-databases-tables.sql_). txt) 누군가가 이것을 사용하기를 원한다면 – mikkom