[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: изменение созданных таблиц
Страницы: 1, 2
Simaron
Впервые столкнулся с нетривиальной ситуаций, возможно кто-то через такое проходил.
Есть база с набором таблиц, Парсер анализирует и и находит поля которые необходимо добавить в таблицы, сначала получается массив таблиц для добавления, после в цикле делается :

$sqlstr="ALTER TABLE ".таблица." ADD COLUMN ".поле." ".тип." NOT NULL";
$sql2 = mysql_query($sqlstr,$dbh);
echo mysql_error();


ошибок никаких не возвращается, лог сервака то же чистый, но команда не исполняется.
напрямую sql запрос в myphpadmin прекрасно исполняется.
Пробовал :
mysql_query("UNLOCK TABLES",$dbh);
mysql_query("LOCK TABLES ".$таблица." WRITE",$dbh);
$sqlstr="ALTER TABLE ".таблица." ADD COLUMN ".поле." ".тип." NOT NULL";
$sql2 = mysql_query($sqlstr,$dbh);
echo mysql_error();

ну и после выхода
mysql_query("UNLOCK TABLES",$dbh);

результат так же отрицательный в плане исполнения.

Права админа естественно используются и в другом месте при работе с таблицей ALTER TABLE прекрасно работает.
Может есть идеи в чем причины?
Игорь_Vasinsky
а сам распечатанный запрос ALTER смотрел?

ты бы оборачивал названия таблиц и полей в апострофы `table_name`

проверки на существование таблицы или поля нет так же.

Цитата
echo mysql_error();

та ты ничё не увидишь

так да

$query - mysql_query($sql) or die(mysql_errors));


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Simaron
"а сам распечатанный запрос ALTER смотрел? "
-конечно и выводил и, как писал, напрямую в базе sql запрос работает
"ты бы оборачивал названия таблиц и полей в апострофы `table_name`"
-пробовал, я просто уже 3 дня с бубном танцую, что только не перепробовал.

"проверки на существование таблицы или поля нет так же."
проверки таблиц есть до этого, просто не стал тут выносить это и так по умолчанию понятно, а полей до этого точно нет я их как раз тут и получаю из OWL DatatypeProperty и они уникальны.

Цитата
echo mysql_error();

та ты ничё не увидишь

так да

$query - mysql_query($sql) or die(mysql_errors));


сейчас пройдусь но у меня есть нечто похожее:
$query = mysql_query($request, $this->conn) or die(mysql_errors);
Игорь_Vasinsky
ээээ)) отвык я от таких записей
вот как надо

$query = mysql_query($sql) or die(mysql_error());


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Simaron
да я сам по памяти пишу пока на работу еду)

так ну вставил
$query = mysql_query($sqlstr,$dbh) or die(mysql_error());
скрипт проходит, тишина полная измений так и нет, в том то и проблема
Игорь_Vasinsky
ты уверен что ты с нужной бд работаешь? может изменения появляются в другом месте ?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
Цитата (Игорь_Vasinsky @ 8.02.2017 - 09:07)

Цитата
echo mysql_error();

та ты ничё не увидишь

так да

$query - mysql_query($sql) or die(mysql_errors));

с чего бы это? Разницы ни какой (не считая ошибки которую ты исправил) rolleyes.gif
killer8080
Simaron
может стоит пересмотреть архитектуру? Постоянно менять структуру таблицы - костыльное решение.
Simaron
Цитата (killer8080 @ 8.02.2017 - 09:41)
Simaron
может стоит пересмотреть архитектуру? Постоянно менять структуру таблицы - костыльное решение.

структура меняется 1 раз вобщем-то, это парсер OWL файла который семантику переводит в реляционную БД для дальнейшей работы. Так что тут не избежать.
На счет другой базы- там не получится, база 1, и с ней работает.
Да и надо сказать прямо перед циклом идет insert в другую таблицу значение найденного поля и все отрабатывает.
Simaron
Вобщем, проблема решена, возможно кому-то понадобится в будущем.
Дело в том что ALTER TABLE очень медленная команда (так как не просто изменяет существующую таблицу, а делает копию с которой и работает). Так вот, если вы как в примере у меня изменяете в цикле, то цикл отрабатывает намного быстрее чем выполняется операция, и база просто молча подвисает и откатывается на начальные таблицы.
Решение или разбивать цикл или вставлять задержку.
Игорь_Vasinsky
Цитата
и база просто молча подвисает и откатывается на начальные таблицы.

да ну...

даже в транзакциях нет отката влияния на структуру бд

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Simaron
Цитата (Игорь_Vasinsky @ 13.02.2017 - 09:40)
Цитата
и база просто молча подвисает и откатывается на начальные таблицы.

да ну...

даже в транзакциях нет отката влияния на структуру бд

ну как факт теперь работает,
с учетом того что альтер тейбл работает создавая копию таблицы, а потом ее переименовывает в начальную других вариантов я просто не вижу.
killer8080
Цитата (Simaron @ 13.02.2017 - 09:31)
Дело в том что ALTER TABLE очень медленная команда (так как не просто изменяет существующую таблицу, а делает копию с которой и работает). Так вот, если вы как в примере у меня изменяете в цикле,

user posted image
Игорь_Vasinsky
тебе короч не таймауты нужны - а ожидание успешного ответа от бд для след. действий

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
Цитата (Игорь_Vasinsky @ 14.02.2017 - 13:25)
тебе короч не таймауты нужны - а ожидание успешного ответа от бд для след. действий

да какие таймауты, у него входные данные определяют схему, тут не таймауты нужны
Цитата (killer8080 @ 8.02.2017 - 09:41)
стоит пересмотреть архитектуру?

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.