Zdravim,
Pri pouziti vygnerovaneho skriptu pro sjednoceni databaze, ulozene procedury vytvori napr. nasledujici dotaz:
ALTER TABLE `mod_calendar_addresses` MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL AFTER `city`, MODIFY `city` varchar(255) COLLATE utf8_general_ci COMMENT 'mesto' AFTER `street`;
Skonci s chybou:
Chyba v dotazu: Unknown column 'city' in 'mod_calendar_addresses'
Ktera je vadna, protoze sloupec mod_calendar_addresses.city existuje. Problem je v tom, ze pri vice MODIFY v jednom ALTER TABLE musi byt sloupce uvedeny v tom poradi ve kterem jsou odkazovany (tj. nemuzu se odkazat na sloupec, ktery potom budu modifikovat). Tedy nasledujici dotaz funguje:
ALTER TABLE `mod_calendar_addresses` MODIFY `city` varchar(255) COLLATE utf8_general_ci COMMENT 'mesto' AFTER `street`, MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL AFTER `city`;
To o tom poradi sloupcu sice v dokumentaci MySQL neni popsane (alespon jsem to nenasel), ale funguje to tak. Kazdopadne, vzhledem k tomu, ze vice MODIFY v jenom ALTER TABLE je rozsireni mysql, tak jedno z reseni by asi bylo mit pro kazdy MODIFY vlastni ALTER.
5.1.48-community přes PHP extenzi MySQLi
Odin.
+ definice tabulky pro uvedene dotazy
CREATE TABLE `mod_calendar_addresses` (
`id` int(4) unsigned NOT NULL AUTO_INCREMENT,
`number` varchar(20) DEFAULT NULL,
`street` varchar(255) DEFAULT NULL,
`city` varchar(255) DEFAULT NULL COMMENT 'mesto',
`name` varchar(255) NOT NULL,
`caption` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
Více ALTERů by bylo problematických u velkých tabulek, protože každý ALTER znamená její kompletní zkopírování, takže by to zbytečně zdržovalo.
K uvedené situaci nejspíš dojde při změně pořadí sloupců v tabulce. Sloupce by se tedy musely procházet v novém pořadí odzadu, což by bylo příliš komplikované (teď se prochází ve starém pořadí zepředu).
Lepší by to bylo vyřešit přímo v MySQL, zkus najít, jestli je na to bug, případně ho založit.