Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 ... 3 4 5 [6] 7   Вниз
  Печать  
Автор Тема: Всякие вопросы по MySQL 5.0+  (Прочитано 125332 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #150 : 02-11-2009 11:54 » 

ещё один глупый вопрос: можно ли менять имя экзешника mysqld-nt.exe ? Я ведь всё равно прописываю его - могу и новое имя прописать. Будет ли работать ?


------------
очень быстро понял, что это не нужно Улыбаюсь Ведь есть
sc start ... / sc stop ...
« Последнее редактирование: 02-11-2009 11:57 от Алексей1153++ » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #151 : 02-11-2009 13:53 » 

Естественно.
Правда, то, что ты не используешь Innodb, не означает, что сервис не будет кушать память: MyISAM использует кеш ключей, буфера сортировки и т.п. вещи.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #152 : 03-11-2009 03:55 » 

ну так я и не говорил, что он не будет.

А щас буду испытывать дистрибуивчик )
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #153 : 03-11-2009 05:12 » 

Ром, а что за параметр в реестре у тебя
"WOW64"=dword:00000001
у меня не вижу такого
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #154 : 03-11-2009 06:55 » 

перешёл с 5.0.11 на 5.1.39
Обнаружился косяк - они поменяли функцию

mysql_fetch_fields()
 - до этого она возвращала указатель на массив описаний полей (тип MYSQL_FIELD) , а сейчас начиная с индекса 1 там всё смещено.
Вместо этой функции надо использовать

mysql_fetch_field_direct
-там можно сразу индекс поля задать и получим указатель на описание именно этого поля
« Последнее редактирование: 03-11-2009 06:59 от Алексей1153++ » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #155 : 03-11-2009 11:28 » 

Ром, а что за параметр в реестре у тебя
"WOW64"=dword:00000001
у меня не вижу такого

Это у меня Win XP 64 стоит.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #156 : 03-11-2009 12:28 » 

блин, что то глухо ( Всё по науке сделал вроде, а сервис не запускается

C:\Documents and Settings\11111>sc start mysq777
[SC] StartService: OpenService FAILED 1060:

Дома щас интернета нету, поэтому завтра побарахтаюсь один, потом отпишусь послезавтра
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #157 : 03-11-2009 12:53 » 

Леш, а может поискать, как создавать сервисы руками? Должна быть какая-то штатная утилита.

Команда sc create

См. sc /?

Пример из инета:
Цитата
sc create <name>
      binpath= "c:\svn\bin\svnserve.exe --service <svn-args>"
      displayname= "Subversion Repository"
      depend= Tcpip

http://www.google.ru/#hl=ru&q=sc+create+mysqld-nt&lr=&aq=&oq=&fp=31f0e6aaf64e162a

Цитата
sc create MySql binpath="C:\mysql_%my_version%\bin\mysqld-nt.exe" start=auto displayname=MySql
« Последнее редактирование: 03-11-2009 13:15 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #158 : 05-11-2009 06:06 » 

я разобралия, это прямо в ini описано, оказывается )

Цитата
# To install the server as a Windows service manually, execute this in a
# command line shell, e.g.
# mysqld --install MySQL41 --defaults-file="C:\Program Files\MySQL\MySQL Server 4.1\my.ini"

единственно, что косячно - PathImage прописывается коряво, почему то приписывается "C:\Documents and Settings\...\Рабочий стол" в начале.
Не разобрался, почему, решил просто - после запуска с --install сам записываю этот параметр в реестр как мне нужно, и всё
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #159 : 04-12-2009 12:09 » 

разобрался, как переименовать файл "mysqld.exe" в любой другой по желанию ))
Вроде работает. Теперь вероятность конфликтов стремится к нулю с отрицательной стороны Улыбаюсь)
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #160 : 18-12-2009 20:35 » 

Ну вот очередная хрень , я точно что-то не в том порядке делаю.

вот лог вызовов АПИ MySQL5 (цифры 0 и 2014 - это код ошибки после вызова функции, flds - количество полей в выборке) :
Код:
mysql_init
0
mysql_real_connect
0

//запрос с "show"
mysql_real_query(show columns from VERCONTROL_PARAMS like 'BaseVersion')
flds=6
0
mysql_use_result
0
mysql_field_count
0
mysql_fetch_field_direct
0
mysql_fetch_field_direct
0
mysql_fetch_field_direct
0
mysql_fetch_field_direct
0
mysql_fetch_field_direct
0
mysql_fetch_field_direct
0
mysql_fetch_row
0
mysql_fetch_lengths
0
mysql_free_result
0

//запрос с "select"
mysql_real_query(select min(BaseVersion) from VERCONTROL_PARAMS)
flds=1
0
mysql_use_result
0
mysql_field_count
0
mysql_fetch_field_direct
0
mysql_fetch_row
0
mysql_fetch_lengths
0
mysql_free_result
0

//запрос с "call" , №1
mysql_real_query(call p_savetojourlog( '00-00-00 00-00-00', 0, 0, 0,'0', 0))
flds=1
0
mysql_use_result
0
mysql_field_count
0
mysql_fetch_field_direct
0
mysql_fetch_row
0
mysql_fetch_lengths
0
mysql_free_result
0

//запрос с "call" , №2
mysql_real_query(call p_savetojourlog( '00-00-00 00-00-00', 0, 0, 0,'0', 0))
flds=1
2014

//далее все функции вертают ошибку 2014 (CR_COMMANDS_OUT_OF_SYNC)
// - то есть неверный порядок команд

mysql_real_query(show columns from VERCONTROL_PARAMS like 'BaseVersion')
flds=1,
2014
mysql_real_query(show columns from VERCONTROL_PARAMS like 'BaseVersion')
flds=1
2014

лог и дополнительные эксперементы показали, что вызов mysql_real_query без оператора "call" в строке запроса проходит удачно, также удачно выбираются данные.
Однако , если вызывается "call" , то первый такой запрос проходит удачно, данные вызываемой процедуры возвращаются. Но второй запрос с call уже происходит с ошибкой CR_COMMANDS_OUT_OF_SYNC
Как будто я где-то что-то забыл вызвать для очистки, но что - тутор не подсказывает... Всё, что велено, я вызвал

код процедуры (может, я что-то с commit не так делаю)
Код:
create procedure p_savetojourlog(							
jour_hard_time DATETIME
,jour_obj_number SMALLINT UNSIGNED
,jour_mess_type SMALLINT UNSIGNED
,jour_data SMALLINT UNSIGNED
,jour_isdata TINYINT UNSIGNED
,jour_user SMALLINT UNSIGNED
)begin

-- returns ID of the record

start transaction;

insert into JOURNAL_LOG(
jour_save_time
,jour_hard_time
,jour_obj_number
,jour_mess_type
,jour_data
,jour_isdata
,jour_user
)values(
localtime()
,jour_hard_time
,jour_obj_number
,jour_mess_type
,jour_data
,jour_isdata
,jour_user
);
select last_insert_id();

commit;
end

Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #161 : 19-12-2009 05:15 » 

Offtopic:

гыы, яндекс нашёл эту страницу в поисках ответов на этот вопрос ))
Поставлю в угол.


а в mysql- гуи браузере прокатывает сколько угодно раз и правильно. В программе же - всего один первый раз...
« Последнее редактирование: 19-12-2009 06:15 от Алексей1153++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #162 : 19-12-2009 07:06 » 

Победил ) Вот лог . Добавлен вызов mysql_next_result и "докачка" других результатов. Только не совсем понятно, откуда берётся ещё результат - если от insert, то он, по идее должен идти первым по счёту, до select last_insert_id();

Но выбирается значение правильно - новый ID.

Поясните , что за ? Улыбаюсь

Код:
mysql_init
0
mysql_real_connect
0
mysql_real_query(show columns from VERCONTROL_PARAMS like 'BaseVersion') ==  flds(6), res(0)
0
mysql_use_result
0
mysql_field_count
0
mysql_fetch_field_direct
0
mysql_fetch_field_direct
0
mysql_fetch_field_direct
0
mysql_fetch_field_direct
0
mysql_fetch_field_direct
0
mysql_fetch_field_direct
0
mysql_fetch_row
0
mysql_fetch_lengths
0
mysql_free_result
mysql_next_result==-1
0
mysql_real_query(select min(BaseVersion) from VERCONTROL_PARAMS) ==  flds(1), res(0)
0
mysql_use_result
0
mysql_field_count
0
mysql_fetch_field_direct
0
mysql_fetch_row
0
mysql_fetch_lengths
0
mysql_free_result
0
mysql_next_result==-1
0



mysql_real_query(call p_savetojourlog( '00-00-00 00-00-00', 0, 0, 0,'0', 0)) ==  flds(1), res(0)
0
mysql_use_result
0
mysql_field_count
0
mysql_fetch_field_direct
0
mysql_fetch_row
0
mysql_fetch_lengths
0
mysql_free_result
0
mysql_next_result==0
0
mysql_next_result==-1
0


mysql_real_query(call p_savetojourlog( '00-00-00 00-00-00', 0, 0, 0,'0', 0)) ==  flds(1), res(0)
0
mysql_use_result
0
mysql_field_count
0
mysql_fetch_field_direct
0
mysql_fetch_row
0
mysql_fetch_lengths
0
mysql_free_result
0
mysql_next_result==0
0
mysql_next_result==-1
0
mysql_close
« Последнее редактирование: 19-12-2009 07:16 от Алексей1153++ » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #163 : 19-12-2009 16:34 » 

В доке написано:

Цитата
Executing a multiple-statement string can produce multiple result sets or row-count indicators. Processing these results involves a different approach than for the single-statement case: After handling the result from the first statement, it is necessary to check whether more results exist and process them in turn if so.

Процедура может вернуть множество рекордсетов. Если при подсоединении ты разрешил такое, то значит должен следовать этому соглашению.

Например, описание для C API: http://dev.mysql.com/doc/refman/5.1/en/c-api-multiple-queries.html
« Последнее редактирование: 19-12-2009 16:36 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #164 : 19-12-2009 16:50 » 

Тогда парочка вопросов по непонятностям:
1) у меня один select и именно от него я ожидаю рекордсет. И он действительно идёт первый по счёту. Почему, если от инсерта тоже что то вышло, то оно - второе по счёту ? Как регулировать этот порядок ?

2) там, где у меня
Код:
mysql_real_query	//обработка "основного рекордсета"
mysql_use_result
...
mysql_free_result
mysql_next_result==0 //докачали ненужный хвост
mysql_next_result==-1

по идее дожно быть
Код:
mysql_real_query	//обработка "основного рекордсета"
mysql_use_result
...
mysql_free_result
mysql_next_result==0 //докачали ненужный хвост
mysql_use_result //вхолостую отураваем и освобождаем
mysql_free_result
mysql_next_result==-1

но этого сейчас не сделано, и ошибки не возникает - это из-за того, что этот "хвост" - пустой рекордсет ?
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #165 : 19-12-2009 17:18 » 

Леш, прочти таки мануал по ссылке выше. Там в конце страницы дан хорошо комментированный пример на C.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #166 : 19-12-2009 17:24 » 

Я его прочитал, поэтому данные вопросы и возникли Улыбаюсь
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #167 : 19-12-2009 17:28 » 

Леш, вот я к примеру выполнил аналогичную твой процедуру в консоли:

Код:
mysql> call test();
+------------------+
| last_insert_id() |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Я вижу тут два результата:
1. Данные от SELECT - 1 строка.
2. Результат вызова CALL - строк нет, но передается счетчик 0 rows affected.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #168 : 19-12-2009 17:38 » 

А в браузере не было видно пустого результата, в консоли я не догадался глянуть ))

Теперь понятно, откуда ноги растут
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #169 : 19-12-2009 17:45 » 

Я понял так: результат состоит из статуса выполнения запроса, рекордсета и счетчиков типа affected rows. Получив очередной результат, надо проверить, есть ли в нем рекордсет - если нет, то это чисто статусный результат. Функции mysql_store_result и mysql_use_result возвращают только текущий рекордсет, mysql_query устанавливает статусы первого результата, mysql_next_result - статусы каждого последующего (и переключает на следующий рекордсет). В общем-то, пример в мануале это и демонстрирует.

Вообще, голова сегодня туго работает, с ленцой: вчера вина выпил...  Скромно так...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #170 : 19-12-2009 17:57 » 

Ну, выходит, статусные результаты - они всегда пустые, поэтому их можно просто "проматывать"

Интересно, а как тогда различить результаты , если два селекта и один из них вернул не пустой набор, а другой - пустой ? )
« Последнее редактирование: 19-12-2009 17:58 от Алексей1153++ » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #171 : 19-12-2009 18:31 » 

Думаю, нужно провести тесты.
Консоль говорит вот это:

Код:
mysql> call test();
Empty set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
« Последнее редактирование: 19-12-2009 18:34 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #172 : 25-02-2010 05:56 » 

имеется таблица с автоинкрементным полем ID (он же primary key) , а так же с текстовым полем name

как сделать, чтобы значения поля name нельзя было задать повторными ?
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #173 : 25-02-2010 06:32 » 

Код:
ALTER TABLE tablename ADD UNIQUE KEY keyname (text_field);

Во время выполнения команды будет произведена попытка создать соотв. индекс. Если в индексируемых полях будет найден дубликат, то индекс не создастся и выдаст ошибку.

Леш, на будущее: в таких случаях лучше сразу результат SHOW CREATE TABLE показать - информативнее и мозги быстрее воспринимают Улыбаюсь
« Последнее редактирование: 25-02-2010 06:35 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #174 : 25-02-2010 06:44 » 

спасибо, понятно. А имена ключей (keyname) в разных таблица, насколько я понял, разрешено повторять ? А то в птичке, если правильно помню, была морока с именами ключей
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #175 : 25-02-2010 06:45 » 

Код:
ALTER TABLE tablename ADD UNIQUE KEY keyname (text_field);

Во время выполнения команды будет произведена попытка создать соотв. индекс. Если в индексируемых полях будет найден дубликат, то индекс не создастся и выдаст ошибку.

кстати, если имя ключа не задать, он по умолчанию будет шлёпать дубли с именами имя_поля_N Отлично
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #176 : 25-02-2010 06:53 » 

Имена ключей уникальны в пределах таблицы. Лучше их задавать короткими, но информативными - тогда в таких вещах, как EXPLAIN потом проще разбираться. Если имя не задать, то MySQL использует имя первого столбца в индексе (правда, не знаю, что будет, если такой индекс есть - не проверял).
« Последнее редактирование: 25-02-2010 06:55 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #177 : 10-03-2010 11:28 » 

Мне скоро потребуется хранить "древесные" данные в БД

Как хранение дерева правильно организуется ? Чтобы по граблям не гулять
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #178 : 10-03-2010 14:34 » 

какие грабли ты видишь?

Хранение данных
Записи содержит идентификатор родителя.

почитай может поможет определиться
http://www.opennet.ru/base/dev/mysql_tree.txt.html
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #179 : 10-03-2010 15:59 » 

что, прям вот так всё просто ? ) как-то не верицо
Записан

Страниц: 1 ... 3 4 5 [6] 7   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines