问题
I am writing a simple procedure to backup a table-
CREATE PROCEDURE daily_backup()
BEGIN
DECLARE given_date VARCHAR(25);
SET given_date = now();
CREATE TABLE given_date LIKE db1.table1;
INSERT INTO given_date SELECT * FROM db1.table1;
END
But it creates a table with name given_date . I want to create a table with date as name. How to do the same ?
回答1:
Try this one
DELIMITER |
CREATE PROCEDURE daily_backup()
BEGIN
SET @s = CONCAT('CREATE TABLE bak_', DATE_FORMAT(CURDATE(), '%Y%m%d'), ' SELECT * FROM table1');
PREPARE stmt FROM @s;
EXECUTE stmt;
END
|
DELIMITER ;
UPDATE: You can make it run multiple times a day
DROP PROCEDURE daily_backup;
DELIMITER |
CREATE PROCEDURE daily_backup()
BEGIN
SET @tbl = DATE_FORMAT(CURDATE(), '%Y%m%d');
SET @s = CONCAT('DROP TABLE IF EXISTS bak_', @tbl);
PREPARE stmt FROM @s;
EXECUTE stmt;
SET @s = CONCAT('CREATE TABLE bak_', @tbl, ' SELECT * FROM table1');
PREPARE stmt FROM @s;
EXECUTE stmt;
END
|
DELIMITER ;
Here is SQLFiddle demo
回答2:
generate create statement with prepare like :-
set @given_date = now();
SET @sql = CONCAT("CREATE TABLE ",@given_date," as SELECT * FROM db1.table1");
PREPARE stmt from @sql;
EXECUTE stmt;
ps:- table name should be valid according to this.
来源:https://stackoverflow.com/questions/17106254/create-a-table-with-date-name