在mysql備份操作中, 我們可能要使用表名和當前時間來做為備份表的名稱,但是MySQL在存儲過程中不支持使用變量名來做表名或者列名。
例如:有一個表”user“,我需要備份一份,並且表名為“user_2017_02_21“。
在MySQL5.1以上的版本中,prepare語句可以支持這樣的操作。
我們可以用set @var=...設置變量,然后用prepare stml from @var設置動態sql語句,最后用EXECUTE stml;執行語句。
下面是以時間為表名,動態備份一個表的sql執行過程:
SET @sqlstr = CONCAT('create table user_',DATE_FORMAT(CURDATE(),'%Y_%m_%d'),' like user'); PREPARE stmt1 FROM @sqlstr ; EXECUTE stmt1 ;
SET @sqlstr = CONCAT('insert into user_',DATE_FORMAT(CURDATE(),'%Y_%m_%d'),' select * from user'); PREPARE stmt1 FROM @sqlstr ; EXECUTE stmt1 ;