Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql crée une table dynamiquement

Pour qu'une chaîne représente un nom de table (ou de base de données), vous devrez concaténer votre chaîne de requête avec la variable et préparer/exécuter une instruction directement dans la procédure stockée. Voici un exemple de base.

-- DROP PROCEDURE IF EXISTS createLogTable;
DELIMITER //
CREATE PROCEDURE createLogTable(tblName VARCHAR(255))
BEGIN
    SET @tableName = tblName;
    SET @q = CONCAT('
        CREATE TABLE IF NOT EXISTS `' , @tableName, '` (
            `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
            `something` VARCHAR(10) NOT NULL,
            `somedate` DATETIME NOT NULL,
            PRIMARY KEY (`id`)
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    ');
    PREPARE stmt FROM @q;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    -- and you're done. Table is created.
    -- process it here if you like (INSERT etc)
END //

Alors… CALL createLogTable('exampleTable');

L'idée de base est donc

  1. concaténer le(s) paramètre(s) de procédure avec votre requête si nécessaire
  2. prépare/exécute une instruction à partir de cette chaîne de requête