it-swarm-eu.dev

MySql - Vytvořte tabulku, pokud to nevyniká Else Truncate?

Zde je aktualizovaná otázka:

aktuální dotaz dělá něco jako:

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

Při prvním spuštění metody, která tuto metodu obsahuje, generuje chybovou zprávu na zkrácení, protože tabulka dosud neexistuje.

Je moje jediná možnost udělat CREATE TABLE, spustit TRUNCATE TABLE a vyplnit tabulku? (3 samostatné dotazy)

původní otázka byla:

Těžko jsem se snažil přijít na to, zda je v MySql možné následující:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Pokud spustím zkrácení odděleně před vytvořením tabulky a tabulka neexistuje, zobrazí se chybová zpráva. Snažím se odstranit tuto chybovou zprávu, aniž byste museli přidávat další dotazy.

Tento kód bude proveden pomocí PHP.

20
shmuel613

shmuel613, bylo by lepší aktualizovat původní otázku, než odpovídat. Je to nejlepší, když je místo jediné místo, které obsahuje úplnou otázku, než aby se rozešlo v diskusi.

Benova odpověď je rozumná, kromě toho, že se zdá, že nemá „ne“, kde ho nechce. Zrušení tabulky pouze v případě, že není neexistuje.

Budete skutečně potřebovat více prohlášení. Buď podmíněně vytvořte a poté vyplňte:

  1. VYTVOŘIT DOČASNOU TABULKU POKUD NENÍ EXISTUJÍ fubar (id int, název varchar (80))
  2. TRUNCATE TABLE fubar
  3. INSERT INTO fubar SELECT * FROM barfu

nebo jen pokles a znovu vytvořit

  1. DROP TABLE IF EXISTS fubar
  2. CREATE TEMPORARY TABLE fubar SELECT id, jméno FROM barfu

S čistým SQL jsou vaše dvě reálné třídy řešení. Mám rád druhý lepší.

(S uloženou procedurou byste ji mohli zredukovat na jeden příkaz. Něco jako: TruncateAndPopulate (fubar) Ale v době, kdy píšete kód pro TruncateAndPopulate (), budete trávit více času než jen pomocí SQL výše.)

22
mdahlman

pokud existuje tabulka, proveďte libovolný dotaz.

Použití: call Edit_table(database-name,table-name,query-string);

  • Postup zkontroluje existenci názvu tabulky pod názvem databáze a provede řetězec dotazu, pokud existuje. Je uložena následující procedura:
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 ;

Více na Mysql

3
kedar

Zkrácení můžete udělat po 'vytvoření, pokud neexistuje'. Tímto způsobem bude vždy existovat ... a vždy bude v tomto bodě prázdný.

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

co takhle:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

Nebo jste chtěli, abyste to udělali pouze s jedním dotazem?

2
Ben

OK, ne špatně. Chcete-li být konkrétnější, aktuální dotaz dělá něco jako:

 $ sql1 = "TRUNCATE TABLE fubar"; 
 $ sql2 = "VYTVOŘIT DOČASNOU TABULKU, Jestli NENÍ EXISTUJÍ fubar SELECT id, jméno FROM barfu"; 

Při prvním spuštění metody, která tuto metodu obsahuje, generuje chybovou zprávu na zkrácení, protože tabulka dosud neexistuje.

Je moje jediná možnost udělat "CREATE TABLE", spustit "TRUNCATE TABLE", a pak vyplnit tabulku? (3 samostatné dotazy)

PS - díky za rychlou reakci!

0
shmuel613

Pokud používáte PHP, použijte mysql_list_tables a zkontrolujte, zda tabulka existuje před TRUNCATE.

0
Lastnico