Forum Webscript.Ru
Общие => Базы данных => Тема начата: Alexandr от 27 Июня 2003, 15:27:13
-
Реальный пример:
CREATE TEMPORARY TABLE tmp_order ( product_id int(10) unsigned NOT NULL default \'0\', kol smallint(5) unsigned NOT NULL default \'0\', price smallint(5) unsigned NOT NULL default \'0\', ver_full varchar(100) NOT NULL default \'\', KEY product_id (product_id) ) TYPE=HEAP;
INSERT tmp_order VALUES (\'3\',\'1\',\'0\',\'\'),(\'4\',\'1\',\'0\',\'\');
UPDATE price p, tmp_order t SET t.ver_full=IF(f_update=\'y\', CONCAT(description, \', #\', kol), p.ver_full) , kol=IF(f_update=\'y\' AND kol>1, 1, kol) , t.price=IF(f_update=\'y\', p.price, p.price*1) WHERE p.id_order=t.product_id;
Ответ:
0 rows affected
2 rows affected
1142: update command denied to user: \'...\' for table \'tmp_order\' > -1 rows affected
Знаю что надо бы пнуть админа (но он куда-то) отлучился.
Подскажите в чём глюк: в версии мускулю, в правах (если в правах, то подскажите какие надо выставить) или в чём другом...
Мои права:
GRANT SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES ON *.* TO \',,,\'@\'.....ru\' IDENTIFIED BY PASSWORD
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `...`.* TO \'...\'@\'...\'
Версия - 4.0.11a-gamma
-
гм, с правами все ок.
Единственное что приходит в голову это то, что CREATE TEMPORARY TABLES - это глобальная привилегия, возможно у них какие-то глюки и для выборки из временной таблицы при множественном апдейте оно требует глобальную привилегию UPDATE.
хотя это смахивает на багу.
Попробуй обновить версию, т.к. 4.0.11 - это даже не stable
-
fidget:
CREATE TEMPORARY TABLES
Я пробовал и с обычными таблицами - такая же ботва
Кстати, если пишешь
UPDATE tmp_order t, price p SET t.ver_full=IF(f_update.......
(поменял местами)
то пишет
1142: update command denied to user: \'...\' for table \'price\' > -1 rows affected
Так что не в этом дело.
Я админа уже попинал. Сказал что вечерком соберёт 4.0.13
Я думаю это всётаки глючёк.
А пока я заменил эту ботву 5-ю запросами вместо 1 апдейта
CREATE TEMPORARY TABLE tmp_order2 ( product_id int(10) unsigned NOT NULL default \'0\', kol smallint(5) unsigned NOT NULL default \'0\', price smallint(5) unsigned NOT NULL default \'0\', ver_full varchar(100) NOT NULL default \'\', KEY product_id (product_id) ) TYPE=HEAP;
INSERT tmp_order2 SELECT t.product_id, IF(f_update=\'y\' AND kol>1, 1, kol), IF(f_update=\'y\', p.price, p.price*1), IF(f_update=\'y\', CONCAT(description, \', #\', kol), p.ver_full)
FROM price p, tmp_order t WHERE p.id_order=t.product_id;
TRUNCATE TABLE tmp_order;
INSERT tmp_order SELECT * FROM tmp_order2;
DROP TABLE tmp_order2;