Question

Voici la question mise à jour:

la requête en cours fait quelque chose comme:

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

La première fois que la méthode contenant cette méthode est exécutée, un message d'erreur est généré sur la troncature car la table n'existe pas encore.

Est-ce que ma seule option est de faire le CREATE TABLE , d'exécuter le TRUNCATE TABLE , puis de remplir le tableau? (3 requêtes distinctes)

la question initiale était:

J'ai eu du mal à essayer de comprendre si ce qui suit est possible dans MySql sans avoir à écrire du bloc SQL:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Si j'exécute tronquer séparément avant la table create et que celle-ci n'existe pas, un message d'erreur s'affiche. J'essaie d'éliminer ce message d'erreur sans avoir à ajouter d'autres requêtes.

Ce code sera exécuté avec PHP.

Était-ce utile?

La solution

shmuel613, il serait préférable de mettre à jour votre question initiale plutôt que de répondre. Il est préférable qu’un seul endroit contienne la question complète au lieu de l’étaler dans une discussion.

La réponse de Ben est raisonnable, sauf qu'il semble avoir un "non" là où il n'en veut pas. Ne laisser tomber la table que s’il n'existe pas , n'est pas tout à fait correct.

Vous aurez en effet besoin de plusieurs déclarations. Soit créer, puis conditionner:

  1. CREER UNE TABLE TEMPORAIRE SI NON EXISTE fubar (id int, nom varchar (80))
  2. foncier TRUNCATE TABLE
  3. INSERT INTO fubar SELECT * FROM barfu

ou simplement déposer et recréer

  1. DROP TABLE IN EXISTS fubar
  2. CREATE TEMPORARY TABLE fubar SELECT id, nom FROM barfu

Avec le SQL pur, ce sont vos deux vraies classes de solutions. J'aime mieux le second.

(Avec une procédure stockée, vous pouvez la réduire à une seule instruction. Quelque chose comme: TruncateAndPopulate (fubar). Mais au moment où vous écrivez le code pour TruncateAndPopulate (), vous passerez plus de temps que le code SQL ci-dessus.)

Autres conseils

Vous pouvez faire le tronçon après le "créer si n'existe pas". De cette façon, il existera toujours ... et sera toujours vide à ce stade.

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar

exécuter une requête si la table existe.

Utilisation: appel Edit_table (nom de la base de données, nom de la table, chaîne de requête);

  • La procédure vérifiera l'existence d'un nom de table sous nom de base de données et exécutera la chaîne de requête si elle existe. Voici la procédure stockée:
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 ;

Pour en savoir plus sur Mysql

que diriez-vous:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

Ou voulez-vous dire que vous voulez simplement le faire avec une seule requête?

OK alors, pas mal. Pour être plus précis, la requête en cours fait quelque chose comme:

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

La première fois que la méthode contenant cette méthode est exécutée, un message d'erreur est généré sur la troncature car la table n'existe pas encore.

Est-ce que ma seule option est de créer "CREATE TABLE", exécuter "TRUNCATE TABLE", puis de remplir le tableau? (3 requêtes distinctes)

PS - Merci d'avoir répondu si rapidement!

Si vous utilisez PHP, utilisez mysql_list_tables pour vérifier que la table existe avant TRUNCATE.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top