Вот обновленный вопрос:
текущий запрос делает что-то вроде:
$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.






как насчет:
DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;
Или вы имели в виду, что просто хотите сделать это с помощью одного запроса?
Удаление и создание с индексами будет медленным, верно?
Вы можете выполнить усечение после «создать, если не существует». Таким образом, он всегда будет существовать ... и в этот момент всегда будет пустым.
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, лучше обновить исходный вопрос, чем отвечать. Лучше, если есть одно место, содержащее полный вопрос, а не разложить его в обсуждении.
Ответ Бена разумен, за исключением того, что у него, кажется, есть «нет» там, где он не хочет. Удаление таблицы только в том случае, если она существует не, не совсем правильно.
Вам действительно понадобится несколько утверждений. Либо условно создать, либо заполнить:
или просто отбрось и воссоздай
С чистым 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 ;
Если вы используете PHP, используйте mysql_list_tables, чтобы проверить, существует ли таблица, прежде чем TRUNCATE ее.
Отбросить, если существует t не?