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

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

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

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

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

Могу ли я сделать только CREATE TABLE, запустить TRUNCATE TABLE и заполнить таблицу? (3 отдельных запроса)

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

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

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

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

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
22
0
81 307
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

как насчет:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

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

Отбросить, если существует t не?

11684 01.07.2012 22:02

Удаление и создание с индексами будет медленным, верно?

Joeri 03.06.2019 14:45

Вы можете выполнить усечение после «создать, если не существует». Таким образом, он всегда будет существовать ... и в этот момент всегда будет пустым.

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar

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

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

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

Единственный ли мой вариант - выполнить «СОЗДАТЬ ТАБЛИЦУ», запустить «ОБРЕЗАТЬ ТАБЛИЦУ», а затем заполнить таблицу? (3 отдельных запроса)

PS - спасибо, что так быстро ответили!

Ответ принят как подходящий

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

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

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

  1. СОЗДАТЬ ВРЕМЕННУЮ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ fubar (id int, name varchar (80))
  2. ОБРЕЗАННЫЙ СТОЛ fubar
  3. ВСТАВИТЬ В fubar SELECT * FROM barfu

или просто отбрось и воссоздай

  1. УДАЛИТЬ ТАБЛИЦУ, ЕСЛИ СУЩЕСТВУЕТ fubar
  2. СОЗДАТЬ ВРЕМЕННУЮ ТАБЛИЦУ fubar SELECT id, name FROM barfu

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

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

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

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

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

Другие вопросы по теме