これが更新された質問です:
現在のクエリは次のようなことをしています:
$sql1 = "TRUNCATE TABLE fubar";
$sql2 = "CREATE TEMPORARY TABLE IF NOT EXISTS fubar SELECT id, name FROM barfu";
これを含むメソッドを初めて実行すると、テーブルがまだ存在しないため、トランケート時にエラーメッセージが生成されます。
CREATE TABLE
を実行し、TRUNCATE TABLE
を実行してからテーブルに入力する唯一のオプションはありますか? (3つの個別のクエリ)
元の質問は:
ブロックSQLを記述せずにMySqlで次のことが可能かどうかを理解するのに苦労しています。
CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar
テーブルを作成する前に個別に切り捨てを実行し、テーブルが存在しない場合、エラーメッセージが表示されます。これ以上クエリを追加せずに、エラーメッセージを排除しようとしています。
このコードはPHPを使用して実行されます。
shmuel613、返信するよりも元の質問を更新した方がよいでしょう。ディスカッションで広めるのではなく、質問全体が1つの場所にあるのが最善です。
ベンの答えは合理的ですが、彼が望んでいないところに「否定」があるようです。 しないが存在する場合にのみテーブルを削除することは正しくありません。
実際、複数のステートメントが必要になります。条件付きで作成してから入力します。
または単にドロップして再作成する
純粋なSQLでは、これらは実際の2つのソリューションクラスです。 2番目のほうが好きです。
(ストアドプロシージャを使用すると、1つのステートメントに減らすことができます。TruncateAndPopulate(fubar)のようなものですが、TruncateAndPopulate()のコードを作成するときには、上記のSQLを使用するよりも多くの時間を費やします。)
テーブルが存在する場合はクエリを実行します。
使用法:call Edit_table(database-name,table-name,query-string);
DELIMITER $$ DROP PROCEDURE IF EXISTS `Edit_table` $$ CREATE PROCEDURE `Edit_table` (in_db_nm varchar(20), in_tbl_nm varchar(20), in_your_query varchar(200)) DETERMINISTIC BEGIN DECLARE var_table_count INT; select count(*) INTO @var_table_count from information_schema.TABLES where TABLE_NAME=in_tbl_nm and TABLE_SCHEMA=in_db_nm; IF (@var_table_count > 0) THEN SET @in_your_query = in_your_query; #SELECT @in_your_query; PREPARE my_query FROM @in_your_query; EXECUTE my_query; ELSE select "Table Not Found"; END IF; END $$ DELIMITER ;
「存在しない場合は作成」の後に切り捨てを実行できます。そうすれば常に存在します...そしてその時点では常に空です。
CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar
どのように:
DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;
それとも、単一のクエリで実行したいという意味ですか?
じゃあ、悪くない。より具体的に言うと、現在のクエリは次のようなことをしています。
$ sql1 = "TRUNCATE TABLE fubar"; $ sql2 = "CREATE TEMPORARY TABLE IF NOT NOT EXISTS fubar SELECT id、name FROM barfu";
これを含むメソッドを初めて実行すると、テーブルがまだ存在しないため、トランケート時にエラーメッセージが生成されます。
「CREATE TABLE」を実行し、「TRUNCATE TABLE」を実行してからテーブルに入力する唯一のオプションはありますか? (3つの個別のクエリ)
PS-迅速に対応していただきありがとうございます。
PHPを使用している場合は、 mysql_list_tables を使用して、テーブルを削除する前にテーブルが存在することを確認します。