MySql - Создать таблицу, если не существует Else Truncate?

Вот обновленный вопрос:

текущий запрос делает что-то вроде:

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

При первом запуске метода, содержащего это, он генерирует сообщение об ошибке в truncate, поскольку таблица еще не существует.

Является ли мой единственный способ сделать CREATE TABLE, запустить TRUNCATE TABLE, а затем заполнить таблицу? (3 отдельных запроса)

исходный вопрос:

Мне было трудно найти, возможно ли следующее в MySql, не записывая блок sql:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Если я запустил truncate отдельно перед таблицей create, а таблица не существует, я получаю сообщение об ошибке. Я пытаюсь исключить это сообщение об ошибке, не добавляя никаких дополнительных запросов.

Этот код будет выполнен с использованием PHP.

Ответы

Ответ 1

shmuel613, было бы лучше обновить исходный вопрос, а не отвечать. Лучше всего, если там будет единственное место, содержащее полный вопрос, а не его распространение в обсуждении.

Ответ Бена разумный, за исключением того, что он, похоже, "не", где он этого не хочет. Отбрасывание таблицы только в том случае, если она не существует, не совсем корректна.

Вам действительно понадобится несколько операторов. Либо условно создайте, то заселите:

  • CREATE TEMPORARY TABLE, если не EXISTS fubar (id int, имя varchar (80))
  • TRUNCATE TABLE fubar
  • INSERT INTO fubar SELECT * FROM barfu

или просто снимите и заново создайте

  • DROP TABLE IF EXISTS fubar
  • CREATE TEMPORARY TABLE fubar SELECT id, имя FROM barfu

С чистым SQL это ваши два реальных класса решений. Мне нравится второй лучше.

(С помощью хранимой процедуры вы можете уменьшить ее до одного оператора. Что-то вроде: TruncateAndPopulate (fubar) Но к тому времени, когда вы напишете код для TruncateAndPopulate(), вы потратите больше времени, чем просто используя SQL выше).

Ответ 2

Вы можете сделать усечение после "create if not exists". Таким образом, он всегда будет существовать... и всегда будет пустым в этой точке.

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar

Ответ 3

выполнить любой запрос, если таблица существует.

Использование: 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 ;

Подробнее о Mysql

Ответ 4

как насчет:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

Или вы имели в виду, что просто хотите сделать это одним запросом?

Ответ 5

ОК, тогда неплохо. Чтобы быть более конкретным, текущий запрос делает что-то вроде:

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

При первом запуске метода, содержащего это, он генерирует сообщение об ошибке в truncate, поскольку таблица еще не существует.

Является ли мой единственный способ сделать "CREATE TABLE", запустить "TRUNCATE TABLE", а затем заполнить таблицу? (3 отдельных запроса)

PS - спасибо за ответ так быстро!

Ответ 6

Если вы используете PHP, используйте mysql_list_tables, чтобы проверить, существует ли таблица перед TRUNCATE.