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行目で構文が間違っているというエラーが表示され続けます。

だから私は、この問題にどのように取り組むか、またはそれをどのように修正するかについて、誰かがたまたまより良いアイデアを持っているだろうかと思っていました。

4

4 に答える 4

3

bfavarettoのコードに追加して、information_schema.tablesがある場合は、次のようにしてみてください。

IF NOT EXISTS (SELECT * FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename')
do your big long create table stuff
于 2012-01-30T19:14:01.817 に答える
0

あなたは次のようなことを試すことができます

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;
于 2012-01-30T19:07:28.940 に答える
0

データベースにクエリを実行する必要がありinformation_schemaます。MySQLフォーラムでこの回答を見つけました:

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';
于 2012-01-30T18:59:19.853 に答える
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が現在のデータベースに存在する場合にのみ発生します。これは、存在しないテーブルの情報のクエリを回避するための良い方法であり、エラーが発生します。これはストアドプロシージャの外部で実行でき、各クエリに「whereexists...」を追加する必要があります。詳細については、 http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.htmlを参照してください。

于 2014-07-09T17:10:12.100 に答える