Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #150 : 02-11-2009 11:54 » |
|
ещё один глупый вопрос: можно ли менять имя экзешника mysqld-nt.exe ? Я ведь всё равно прописываю его - могу и новое имя прописать. Будет ли работать ? ------------ очень быстро понял, что это не нужно Ведь есть sc start ... / sc stop ...
|
|
« Последнее редактирование: 02-11-2009 11:57 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #151 : 02-11-2009 13:53 » |
|
Естественно. Правда, то, что ты не используешь Innodb, не означает, что сервис не будет кушать память: MyISAM использует кеш ключей, буфера сортировки и т.п. вещи.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #152 : 03-11-2009 03:55 » |
|
ну так я и не говорил, что он не будет.
А щас буду испытывать дистрибуивчик )
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #153 : 03-11-2009 05:12 » |
|
Ром, а что за параметр в реестре у тебя "WOW64"=dword:00000001 у меня не вижу такого
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
Технический
Администратор
Offline
Пол:
|
|
« Ответ #155 : 03-11-2009 11:28 » |
|
Ром, а что за параметр в реестре у тебя "WOW64"=dword:00000001 у меня не вижу такого
Это у меня Win XP 64 стоит.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #156 : 03-11-2009 12:28 » |
|
блин, что то глухо ( Всё по науке сделал вроде, а сервис не запускается
C:\Documents and Settings\11111>sc start mysq777 [SC] StartService: OpenService FAILED 1060:
Дома щас интернета нету, поэтому завтра побарахтаюсь один, потом отпишусь послезавтра
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #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=31f0e6aaf64e162asc create MySql binpath="C:\mysql_%my_version%\bin\mysqld-nt.exe" start=auto displayname=MySql
|
|
« Последнее редактирование: 03-11-2009 13:15 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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 сам записываю этот параметр в реестр как мне нужно, и всё
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #159 : 04-12-2009 12:09 » |
|
разобрался, как переименовать файл "mysqld.exe" в любой другой по желанию )) Вроде работает. Теперь вероятность конфликтов стремится к нулю с отрицательной стороны )
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #161 : 19-12-2009 05:15 » |
|
Offtopic: гыы, яндекс нашёл эту страницу в поисках ответов на этот вопрос ))
Поставлю в угол. а в mysql- гуи браузере прокатывает сколько угодно раз и правильно. В программе же - всего один первый раз...
|
|
« Последнее редактирование: 19-12-2009 06:15 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
Технический
Администратор
Offline
Пол:
|
|
« Ответ #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 »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
Технический
Администратор
Offline
Пол:
|
|
« Ответ #165 : 19-12-2009 17:18 » |
|
Леш, прочти таки мануал по ссылке выше. Там в конце страницы дан хорошо комментированный пример на C.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #166 : 19-12-2009 17:24 » |
|
Я его прочитал, поэтому данные вопросы и возникли
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #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.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #168 : 19-12-2009 17:38 » |
|
А в браузере не было видно пустого результата, в консоли я не догадался глянуть ))
Теперь понятно, откуда ноги растут
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #169 : 19-12-2009 17:45 » |
|
Я понял так: результат состоит из статуса выполнения запроса, рекордсета и счетчиков типа affected rows. Получив очередной результат, надо проверить, есть ли в нем рекордсет - если нет, то это чисто статусный результат. Функции mysql_store_result и mysql_use_result возвращают только текущий рекордсет, mysql_query устанавливает статусы первого результата, mysql_next_result - статусы каждого последующего (и переключает на следующий рекордсет). В общем-то, пример в мануале это и демонстрирует. Вообще, голова сегодня туго работает, с ленцой: вчера вина выпил...
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #170 : 19-12-2009 17:57 » |
|
Ну, выходит, статусные результаты - они всегда пустые, поэтому их можно просто "проматывать"
Интересно, а как тогда различить результаты , если два селекта и один из них вернул не пустой набор, а другой - пустой ? )
|
|
« Последнее редактирование: 19-12-2009 17:58 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #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 »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #172 : 25-02-2010 05:56 » |
|
имеется таблица с автоинкрементным полем ID (он же primary key) , а так же с текстовым полем name
как сделать, чтобы значения поля name нельзя было задать повторными ?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #173 : 25-02-2010 06:32 » |
|
ALTER TABLE tablename ADD UNIQUE KEY keyname (text_field); Во время выполнения команды будет произведена попытка создать соотв. индекс. Если в индексируемых полях будет найден дубликат, то индекс не создастся и выдаст ошибку. Леш, на будущее: в таких случаях лучше сразу результат SHOW CREATE TABLE показать - информативнее и мозги быстрее воспринимают
|
|
« Последнее редактирование: 25-02-2010 06:35 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #174 : 25-02-2010 06:44 » |
|
спасибо, понятно. А имена ключей (keyname) в разных таблица, насколько я понял, разрешено повторять ? А то в птичке, если правильно помню, была морока с именами ключей
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #175 : 25-02-2010 06:45 » |
|
ALTER TABLE tablename ADD UNIQUE KEY keyname (text_field); Во время выполнения команды будет произведена попытка создать соотв. индекс. Если в индексируемых полях будет найден дубликат, то индекс не создастся и выдаст ошибку. кстати, если имя ключа не задать, он по умолчанию будет шлёпать дубли с именами имя_поля_N
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #176 : 25-02-2010 06:53 » |
|
Имена ключей уникальны в пределах таблицы. Лучше их задавать короткими, но информативными - тогда в таких вещах, как EXPLAIN потом проще разбираться. Если имя не задать, то MySQL использует имя первого столбца в индексе (правда, не знаю, что будет, если такой индекс есть - не проверял).
|
|
« Последнее редактирование: 25-02-2010 06:55 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #177 : 10-03-2010 11:28 » |
|
Мне скоро потребуется хранить "древесные" данные в БД
Как хранение дерева правильно организуется ? Чтобы по граблям не гулять
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #179 : 10-03-2010 15:59 » |
|
что, прям вот так всё просто ? ) как-то не верицо
|
|
|
Записан
|
|
|
|
|