sql >> データベース >  >> RDS >> Mysql

PHPでMySQLテーブルが存在するかどうかを確認するにはどうすればよいですか?

    // Select 1 from table_name will return false if the table does not exist.
    $val = mysql_query('select 1 from `table_name` LIMIT 1');
    
    if($val !== FALSE)
    {
       //DO SOMETHING! IT EXISTS!
    }
    else
    {
        //I can't find it...
    }
    

    確かに、これはPHPイディオムよりもPythonicですが、一方で、大量の余分なデータを処理することを心配する必要はありません。

    編集

    したがって、このメッセージを書いている時点で、この回答は少なくとも2回マークダウンされています。大きな間違いを犯したと仮定して、行ってベンチマーク を実行しました。 、これは、テーブルが存在しない場合、私のソリューションが最も近い代替案よりも10%以上高速であり、テーブルが存在する場合、25%以上高速であることがわかりました。

    :::::::::::::::::::::::::BEGINNING NON-EXISTING TABLE::::::::::::::::::::::::::::::
    23.35501408577 for bad select
    25.408507823944 for select from schema num rows -- calls mysql_num_rows on select... from information_schema.
    25.336688995361 for select from schema fetch row -- calls mysql_fetch_row on select... from information_schema result
    50.669058799744 for SHOW TABLES FROM test
    :::::::::::::::::::::::::BEGINNING EXISTING TABLE::::::::::::::::::::::::::::::
    15.293519973755 for good select
    20.784908056259 for select from schema num rows
    21.038464069366 for select from schema fetch row
    50.400309085846 for SHOW TABLES FROM test
    

    これをDESCに対して実行しようとしましたが、276秒後にタイムアウトになりました(私の答えは24秒で、存在しないテーブルの説明を完了できませんでした)。

    念のため、テーブルが4つしかないスキーマに対してベンチマークを行っています。これは、ほぼ新しいMySQLインストールです(これは、これまでのところ唯一のデータベースです)。エクスポートを確認するには、こちら をご覧ください。 。

    さらに

    この特定のソリューションは、同じクエリがPgSQLとOracleで機能するため、データベースに依存しません。

    最後に

    mysql_query() 「このテーブルは存在しません」ではないエラーに対してFALSEを返します。

    テーブルがしないことを保証する必要がある場合 存在する場合は、mysql_errno()を使用します エラーコードを取得し、関連するMySQLエラー



    1. Python:mysqlデータベースの変更に関する通知を取得する方法は?

    2. HibernateでBigDecimalをマップして、入力したのと同じスケールに戻すにはどうすればよいですか?

    3. フィールドに$xが含まれていないSQLクエリ

    4. MySQLエラー1(HY000)ファイルErrcode2の作成で問題が発生しました