簡體   English   中英

如何使用Mysql過程和Date()創建存檔表

[英]How to create an Archive Table with a Mysql Procedure and Date()

我嘗試創建一個每天運行一次的過程,並存儲更大表中的數據子集。 該表的名稱應使用CURDATE()動態創建。

    DROP PROCEDURE daily_backup;
    DELIMITER |
    CREATE PROCEDURE daily_backup()
    BEGIN
      SET @tbl = CONCAT('items_data_', DATE_FORMAT(CURDATE(), '%Y%m%d'));
      SET @s = CONCAT('DROP TABLE IF EXISTS ', @tbl);
      PREPARE stmt FROM @s;
      EXECUTE stmt;

      @s = CONCAT('CREATE TABLE `', @tb1, '` (`id` int(11) NOT NULL,`up` mediumint(9) NOT NULL,`down` mediumint(9) NOT NULL) ENGINE=Archive');

      PREPARE stmt FROM @s;
      EXECUTE stmt;

      SET @s = CONCAT('INSERT INTO ', @tbl, ' SELECT id,up,down FROM items;');
      PREPARE stmt FROM @s;
      EXECUTE stmt;
    END

這些是結果

#1064-您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊以獲取正確的語法,以在'@s = CONCAT('CREATE TABLE`',@ tb1,'`(`id` int(11)NOT NULL,`up` mediumint( 9)'在第8行

編輯 //現在工作

    DROP PROCEDURE daily_backup;
    DELIMITER |
    CREATE PROCEDURE daily_backup()
    BEGIN
      SET @tbl = CONCAT('items_data_', DATE_FORMAT(CURDATE(), '%Y%m%d'));
      SET @s = CONCAT('DROP TABLE IF EXISTS ', @tbl);
      PREPARE stmt FROM @s;
      EXECUTE stmt;

      SET @s = CONCAT('CREATE TABLE `', @tbl, '` (`id` int(11) NOT NULL,`up` mediumint(9) NOT NULL,`down` mediumint(9) NOT NULL) ENGINE=Archive');

      PREPARE stmt FROM @s;
      EXECUTE stmt;

      SET @s = CONCAT('INSERT INTO ', @tbl, ' SELECT id,up,down FROM items;');
      PREPARE stmt FROM @s;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
    END

變量分配始終需要使用SET命令:

SET @s = CONCAT('CREATE TABLE `', @tbl, '` (`id` int(11) NOT NULL,`up` mediumint(9) NOT NULL,`down` mediumint(9) NOT NULL) ENGINE=Archive');

請注意,此語句中有@tb1 ,應該為@tbl

在使用DEALLOCATE准備好的語句后將其DEALLOCATE也是一個好習慣,即

DEALLOCATE PREPARE stmt;

EXECUTE stmt之后

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM