Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> изменение созданных таблиц, ALTER TABLE
Simaron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 43831
На форуме: 4 месяца, 18 дней
Карма:




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

$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 прекрасно работает.
Может есть идеи в чем причины?

Это сообщение отредактировал Simaron - 8.02.2017 - 09:04
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




а сам распечатанный запрос ALTER смотрел?

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

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

Цитата
echo mysql_error();

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

так да

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


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Simaron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 43831
На форуме: 4 месяца, 18 дней
Карма:




"а сам распечатанный запрос 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);
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




ээээ)) отвык я от таких записей
вот как надо

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


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Simaron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 43831
На форуме: 4 месяца, 18 дней
Карма:




да я сам по памяти пишу пока на работу еду)

так ну вставил
$query = mysql_query($sqlstr,$dbh) or die(mysql_error());
скрипт проходит, тишина полная измений так и нет, в том то и проблема

Это сообщение отредактировал Simaron - 8.02.2017 - 09:34
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




ты уверен что ты с нужной бд работаешь? может изменения появляются в другом месте ?


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8948
Пользователь №: 26630
На форуме: 6 лет, 3 месяца, 24 дня
Карма: 606




Цитата (Игорь_Vasinsky @ 8.02.2017 - 09:07)

Цитата
echo mysql_error();

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

так да

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

с чего бы это? Разницы ни какой (не считая ошибки которую ты исправил) rolleyes.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8948
Пользователь №: 26630
На форуме: 6 лет, 3 месяца, 24 дня
Карма: 606




Simaron
может стоит пересмотреть архитектуру? Постоянно менять структуру таблицы - костыльное решение.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Simaron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 43831
На форуме: 4 месяца, 18 дней
Карма:




Цитата (killer8080 @ 8.02.2017 - 09:41)
Simaron
может стоит пересмотреть архитектуру? Постоянно менять структуру таблицы - костыльное решение.

структура меняется 1 раз вобщем-то, это парсер OWL файла который семантику переводит в реляционную БД для дальнейшей работы. Так что тут не избежать.
На счет другой базы- там не получится, база 1, и с ней работает.
Да и надо сказать прямо перед циклом идет insert в другую таблицу значение найденного поля и все отрабатывает.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Simaron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 43831
На форуме: 4 месяца, 18 дней
Карма:




Вобщем, проблема решена, возможно кому-то понадобится в будущем.
Дело в том что ALTER TABLE очень медленная команда (так как не просто изменяет существующую таблицу, а делает копию с которой и работает). Так вот, если вы как в примере у меня изменяете в цикле, то цикл отрабатывает намного быстрее чем выполняется операция, и база просто молча подвисает и откатывается на начальные таблицы.
Решение или разбивать цикл или вставлять задержку.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




Цитата
и база просто молча подвисает и откатывается на начальные таблицы.

да ну...

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


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Simaron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 43831
На форуме: 4 месяца, 18 дней
Карма:




Цитата (Игорь_Vasinsky @ 13.02.2017 - 09:40)
Цитата
и база просто молча подвисает и откатывается на начальные таблицы.

да ну...

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

ну как факт теперь работает,
с учетом того что альтер тейбл работает создавая копию таблицы, а потом ее переименовывает в начальную других вариантов я просто не вижу.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8948
Пользователь №: 26630
На форуме: 6 лет, 3 месяца, 24 дня
Карма: 606




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

user posted image
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




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


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8948
Пользователь №: 26630
На форуме: 6 лет, 3 месяца, 24 дня
Карма: 606




Цитата (Игорь_Vasinsky @ 14.02.2017 - 13:25)
тебе короч не таймауты нужны - а ожидание успешного ответа от бд для след. действий

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

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса