web-dev-qa-db-ja.com

MySql-存在しない場合はテーブルを作成します。

これが更新された質問です:

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

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

21
shmuel613

shmuel613、返信するよりも元の質問を更新した方がよいでしょう。ディスカッションで広めるのではなく、質問全体が1つの場所にあるのが最善です。

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

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

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

または単にドロップして再作成する

  1. ドロップテーブルが存在する場合
  2. 一時テーブルの作成fubar SELECT id、barfuからの名前

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

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

23
mdahlman

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

使用法: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の詳細

3
kedar

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

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar
3
Mark Janssen

どのように:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

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

2
Ben

じゃあ、悪くない。より具体的に言うと、現在のクエリは次のようなことをしています。

 $ sql1 = "TRUNCATE TABLE fubar"; 
 $ sql2 = "CREATE TEMPORARY TABLE IF NOT NOT EXISTS fubar SELECT id、name FROM barfu"; 

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

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

PS-迅速に対応していただきありがとうございます。

0
shmuel613

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

0
Lastnico