Ответ 1
Вы можете сделать это:
create table if not exists <tablename> . . .;
truncate table <tablename>;
insert into <tablename>(cols)
select blah blahblah . . .;
Вам вообще не нужны инструкции if
.
Работа с MySQL (у меня практически нет знаний PHP), мне нужно иметь таблицу, которая по существу является подмножеством из гораздо более крупной таблицы. Исходная таблица время от времени меняется, теряя некоторые записи, приобретая другие новые и изменяя значения для существующих. Я могу описать, что хочу, но не могу понять синтаксис команд, чтобы заставить его работать. Я также знаю, что у меня могут быть два отдельных запроса и просто запускать то, что мне нужно, и у меня это получилось, но я хотел бы объединить их, если это возможно. Вот что я хочу:
ЕСЛИ поднаборная таблица НЕ СУЩЕСТВУЕТ, создайте ее как [select query], ELSE обрезает subset_table и вставьте [select query]
Как я уже сказал, я знаю, что есть другие способы сделать это: я мог бы отказаться, если бы существовал/создавал, или я мог бы просто запустить два разных файла sql. Я просто хочу знать, могу ли я сделать это, как указано выше.
Мысли?
Вы можете сделать это:
create table if not exists <tablename> . . .;
truncate table <tablename>;
insert into <tablename>(cols)
select blah blahblah . . .;
Вам вообще не нужны инструкции if
.
Это также можно сделать с помощью SP (хранимой процедуры)... делает его более читабельным и безопасным
DELIMITER $$
DROP PROCEDURE IF EXISTS `create_table_sp`$$
CREATE PROCEDURE `create_table_sp`()
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.TABLES WHERE table_name = '<table_name>'
AND table_schema = DATABASE() AND table_type = 'BASE TABLE') THEN
CREATE TABLE <subset_table_name>
AS SELECT * FROM <main_table_name>;
ELSE
TRUNCATE TABLE <subset_table_name>;
INSERT INTO <subset_table_name>
AS SELECT * FROM <main_table_name>;
END IF;
END$$
DELIMITER ;
CALL `create_table_sp`;
DROP PROCEDURE IF EXISTS `create_table_sp`;
Существует и другой способ:
Надеюсь, это помогло....