2012-01-30 20 views
1

私はMySQL 5.0+を使用していますが、テーブルが存在しない場合は大きなコマンドリストを実行しようとしています。だから私は持っているしたいと思います:テーブルが存在しない場合は長いクエリを実行

if not exist table 
then 
10000 line query that creates and populates the table with a lot of entries. 
end if 

唯一の問題は、私が検索し、これまでのところ、私はMySQLは、このような機能をサポートしていないことが判明しているということです。私が持っている現在の瞬間

IF NOT EXISTS `profiles` 
THEN 
    A LOT OF QUERIES; 
END IF; 

それは構文は誰もが持ってどうなるのであれば、私は思っていたライン1

に間違っていると言って私にエラーを与え続けているいくつかの理由は、どのようにこの問題に近づくか、またはそれを修正する方法に関するより良いアイデア。

答えて

3

ような何かを試すことができ、このような何かしてみてください:

IF NOT EXISTS (SELECT * FROM information_schema.tables 
WHERE table_schema = 'databasename' 
AND table_name = 'tablename') 
do your big long create table stuff 
2

information_schemaデータベースを照会する必要があります。 MySQL Forumsにこの答えを見つけました:

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'databasename' 
AND table_name = 'tablename'; 
+0

これは関連するようには思われません。OPは、テーブルが存在しない場合、他のSQLを_条件付きで実行する方法を知りたいと考えています。 – Alnitak

+0

@ Alnitakですが、テーブルが存在するかどうかを知る唯一の方法は、information_schemaを照会することです。彼はおそらく手続きを作成しているので、私が投稿したクエリを使用して、変数に 'table_name'を割り当て、それに基づいて条件チェックを行います。 – bfavaretto

0

あなたはINFORMATION_SCHEMA.TABLESを持っている場合は、bfavarettoからコードへ上Addding

CREATE PROCEDURE test() 
BEGIN 
    DECLARE tmp INT; 
    DECLARE CONTINUE HANDLER FOR 1146 -- 1146 - table does not exist 
    BEGIN 
    -- A lot of queries 
    END; 
    SELECT 1 INTO tmp FROM profiles LIMIT 1; -- INTO just to prevent any output 
END; 
0

次のようなものを試すことができます:

select * from table1 where exists (select table_name from information_schema.tables where table_schema=database() and table_name = 'table1'); 

'select * from table1'は、現在のデータベースにtable1が存在する場合にのみ発生します。これは、存在しないテーブルの情報をクエリすることを回避するための良い方法です。その結果、エラーが発生します。これをストアドプロシージャの外部で実行することができ、それぞれのクエリに 'where exists ...'を追加する必要があります。詳細は、http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.htmlを参照してください。

関連する問題