MySQL: Jak vytvořit tabulku s názvem obsaženým v proměnné?


Jelikož MySQL neumožňuje něco jako CREATE TABLE @novyNazev (…), je potřeba si trochu pomoci. Dělá se to jednoduše tak, že si SQL příkaz nejprve uložíte do proměnné, třeba pomocí slučovacího příkazu CONCAT(‚CREATE TABLE‘, @novyNazev, ‚(…)‘); Následně pomocí příkazu PREPARE a EXECUTE SQL dotaz spustíte. Konkrétní příklad uložené procedury mluví za vše.

BEGIN
SET @newDomainTable := CONCAT('domains_', newDomain);
SET @SQL = CONCAT(
'CREATE TABLE ',@newDomainTable,' (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`domain` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `domain` (`domain`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;');
PREPARE sqlcmd from @SQL;
EXECUTE sqlcmd;
DEALLOCATE PREPARE sqlcmd;
END