23

更新された質問は次のとおりです。

現在のクエリは次のようなことをしています:

$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 を使用して実行されます。

4

6 に答える 6

25

shmuel613、返信するよりも元の質問を更新する方がよいでしょう。質問を分散して議論するのではなく、完全な質問を 1 つの場所にまとめた方がよいでしょう。

ベンの答えは合理的ですが、彼が望んでいないところに 'not' があるようです。テーブルが存在しない場合にのみテーブルを削除するのは正しくありません。

実際、複数のステートメントが必要になります。条件付きで作成してから移入します。

  1. 存在しない場合は一時テーブルを作成する fubar ( id int, name varchar(80) )
  2. TRUNCATE TABLE フーバー
  3. INSERT INTO fubar SELECT * FROM barfu

または、ドロップして再作成するだけです

  1. DROP TABLE IF EXISTS fubar
  2. CREATE TEMPORARY TABLE fubar SELECT ID, name FROM barfu

純粋な SQL では、これらが実際のソリューションの 2 つのクラスになります。私は2番目の方が好きです。

(ストアド プロシージャを使用すると、それを 1 つのステートメントに減らすことができます。次のようなものです: TruncateAndPopulate(fubar) しかし、TruncateAndPopulate() のコードを記述する頃には、上記の SQL を使用するよりも多くの時間を費やすことになります。)

于 2008-09-17T17:12:09.547 に答える
3

「存在しない場合は作成」の後に切り捨てを行うことができます。そうすれば、常に存在し、その時点では常に空になります。

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar
于 2008-09-17T15:22:45.363 に答える
3

テーブルが存在する場合、任意のクエリを実行します。

使用法:call Edit_table(database-name,table-name,query-string);

  • プロシージャは、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 ;

Mysql の詳細

于 2009-11-03T10:43:57.080 に答える
2

どうですか:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

それとも、単一のクエリでそれを実行したいということでしたか?

于 2008-09-17T15:22:00.733 に答える
0

では、悪くはありません。具体的には、現在のクエリは次のようなことを行っています。

$ sql1 = "TRUNCATE TABLE fubar";
$ sql2="存在しない場合は一時テーブルを作成しますfubarSELECTid、name FROM barfu";

これを含むメソッドを初めて実行すると、テーブルがまだ存在しないため、切り捨て時にエラーメッセージが生成されます。

「CREATETABLE」を実行し、「TRUNCATE TABLE」を実行してから、テーブルに入力する唯一のオプションはありますか?(3つの別々のクエリ)

PS-とても迅速に対応してくれてありがとう!

于 2008-09-17T15:30:16.750 に答える
0

PHP を使用している場合は、テーブルを TRUNCATE する前に、mysql_list_tablesを使用してテーブルが存在することを確認します。

于 2009-11-03T10:51:10.333 に答える