2012-01-02 21 views
2

mysqlデータベースをstrict_all_tablesに非厳密なモードから移行し、すべてのデータベースとテーブルから無効な日付(0000-00-00)を持つ既存の行をすべて検索したい私たちのサーバーに。 1つのコマンドや他の簡単な方法でこれを行う方法はありますか?mysqlデータベースで無効な0000-00-00日付を見つける

0000-00-00値が存在するデータベースとテーブル名を知りたい場合は、列名がプラスになります。

大量のテーブルを持つ大量のデータベースがあります。大量のデータが含まれているものもあります。そのため、メソッドが自動化されるほど、より優れたものになります。

答えて

3

このhttp://code.google.com/p/anywhereindb/またはこのhttp://forge.mysql.com/tools/tool.php?id=232

mikkom編集を試してみてください。

#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

Thankyあなた、手順バージョン(forge.mysqlを:ここでは、外部ソースからいつか消える場合にはコピーされた実際のスクリプトがあります.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

関連する問題