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.