Mysql Не работает запрос в постере ?

  • Автор темы Автор темы svaminar
  • Дата начала Дата начала

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Реакции
379
Баллы
63
Не работает sql запрос
Код:
Развернуть Свернуть Копировать
LOCK TABLES Table_1_copy WRITE;
SELECT @figa := `data` FROM Table_1_copy LIMIT 1;
DELETE FROM Table_1_copy WHERE data = @figa;
UNLOCK TABLES;
heidusql норм отрабатывает, а в прожект мейкере ошибка
6qeAkuD.png


Подозреваю из за

Какой правильней синтаксис.
Или подскажите как исправить запрос чтоб не юзать
 
О! Первый пользователь баз данных)
 
Код:
Развернуть Свернуть Копировать
SELECT @figa := `data` FROM Table_1_copy LIMIT 1;
А что это за строка такая? для SElECT формат такой - SELECT column_name(s) FROM table1;
 
да на сайте каком то нашел.
Вроде пишет в figa значения полученой строчки, а потом можно использовать figa для удаления.
Хочу получить строку в переменную и потом ее сразу удалить одним запросом с блокировкой.

В хейде код отрабативает, а в посере никак.
______
Кажется эта штука @figa називается
локальные переменные в запросе
 
Последнее редактирование:
Ребята подскажите кто знает плиз :ah:
Хочу получить строку в и потом ее сразу удалить одним запросом с блокировкой.
 
Поставил таску программисту, кто реализовывал работу с БД в программе.
Как получу ответ отпишу вам. Не раньше следующей недели, к сожалению, точно.
 
Получил фидбек от другого программиста:

В вашем примере несколько запросов, постер умеет выполнять под одному запросу только.
Можно на сервере создать хранимую процедуру, которая может включать в себя несколько запросов, и ее дергать как скалярный запрос уже через постер.
 
  • Оценить
Реакции: svaminar
Ростоникс
Извини если говорю глупость, так как я не програмист и может ошибаюсь.

У меня такой запрос
LOCK TABLES tmp WRITE;
UPDATE `tmp` SET `id`=`id`+1;
SELECT id FROM tmp;
UNLOCK TABLES;
Работает норм. Вроде там 2 запроса UPDATE и SELECT + блокировка.

Но Если чесно то при слове хранимие процедури ... Ну я только 3 день с мускулом работаю.
А реализацию я сделал сначала в поле вставлял случайное значения а потом уже от нее плясал.
 
Ростоникс
Извини если говорю глупость, так как я не програмист и может ошибаюсь.

У меня такой запрос

Работает норм. Вроде там 2 запроса UPDATE и SELECT + блокировка.

Но Если чесно то при слове хранимие процедури ... Ну я только 3 день с мускулом работаю.
А реализацию я сделал сначала в поле вставлял случайное значения а потом уже от нее плясал.
попробуй тогда без вот этого @figa := просто
мож прокатит
 
  • Оценить
Реакции: svaminar
А с мусколом работать просто шикарно. Никаких фалйов таблиц и глюков. С любого места запускай шаблони и работай. А если еще и хранить настройки шаблонов в бд то просто сказка получается.
Самое шикарное в етом обновлении.
 
  • Оценить
Реакции: SilverSun, Astraport и CSS
Спасибо большое реализовал уже по другому.
А вот в етом @figa :=
как раз большая плюшка может получится при реализации сложних запросов

вот тут я про них прочитал
http://www.mysql.ru/docs/man/Variables.html

На мой нубский взгляд проблема в том что имя лок переменных начинается с знака @
С такого же знака @
Начинаются использование параметри запроса.

ru:db-pic3.png


Хотя я могу и ошибатся.
 
А с мусколом работать просто шикарно. Никаких фалйов таблиц и глюков. С любого места запускай шаблони и работай. А если еще и хранить настройки шаблонов в бд то просто сказка получается.
Самое шикарное в етом обновлении.
Да, базы тема ) Сам только с прошлого года юзаю, но не могу нарадоваться)
 
  • Оценить
Реакции: SilverSun, CSS и svaminar
Спасибо большое реализовал уже по другому.
А вот в етом @figa :=
как раз большая плюшка может получится при реализации сложних запросов

вот тут я про них прочитал
http://www.mysql.ru/docs/man/Variables.html

На мой нубский взгляд проблема в том что имя лок переменных начинается с знака @
С такого же знака @
Начинаются использование параметри запроса.

ru:db-pic3.png


Хотя я могу и ошибатся.
тут ковычки нужны поидее, "@number" если это не числа
Будут вопросы по mysql обращайтесь, правда у самого пока не mysqlная версия зенки т.ч. все вопросы ток касаемо самой mysql
Еще гемор может быть с правами на доступ к базам, обычно они прописаны как с localhost на серваках... т.ч. если вы коннектитесь извне то может не работать, так же часто закрывают через фаерв-вол доступ, т.к. есть определенные уязвимости...
 
  • Оценить
Реакции: CSS и svaminar
А с мусколом работать просто шикарно. Никаких фалйов таблиц и глюков. С любого места запускай шаблони и работай. А если еще и хранить настройки шаблонов в бд то просто сказка получается.
Самое шикарное в етом обновлении.
С многопоточностью проблем нет? Особенно если у нас многопоточная запись.

Да, базы тема ) Сам только с прошлого года юзаю, но не могу нарадоваться)
  1. Можете в двух словах описать контексты где это особенно востребовано?
  2. И кстати сама база удалённая у вас или локальная, если локальная, то какой софт её хостит?
  3. sqilte текущими инструментами подключить можно?
  4. Существует ли что-то удобное чтобы организовать portable mysql базу? Запустил из коробки без установки и вуаля
 
Последнее редактирование:
С многопоточностью проблем нет? Особенно если у нас многопоточная запись.


  1. Можете в двух словах описать контексты где это особенно востребовано?
  2. И кстати сама база удалённая у вас или локальная, если локальная, то какой софт её хостит?
  3. sqilte текущими инструментами подключить можно?
  4. Существует ли что-то удобное чтобы организовать portable mysql базу? Запустил из коробки без установки и вуаля
Про многопоточность и не только - гимор возникает при апдейтах больших баз, она может тупо встать там надо юзать innodb тип таблиц и не забывать о индексации, большую часть гимора снимает ssd и куча памяти :)
1. везде т.к. у меня на хосте например каждодневный бекап и вероятность потерь данных в таком случае очень мал + 1 база сколькоугодно зенок ну и перенос если что пару минут занимает.
2. любой хостинг с mysql нюансы выше
3. хз
4. не слышал, но там с тампа оно одной командой заводится.
 
  • Оценить
Реакции: CSS
Про многопоточность и не только - гимор возникает при апдейтах больших баз, она может тупо встать там надо юзать innodb тип таблиц и не забывать о индексации, большую часть гимора снимает ssd и куча памяти :-)
1. везде т.к. у меня на хосте например каждодневный бекап и вероятность потерь данных в таком случае очень мал + 1 база сколькоугодно зенок ну и перенос если что пару минут занимает.
2. любой хостинг с mysql нюансы выше
3. хз
4. не слышал, но там с тампа оно одной командой заводится.
Благодарю очень за ответы! Они породили новые вопросы :-)

0.1. По SSD - как гемор снимает то?
0.2. База же в оперативке вертится?
0.3. Жрёт кстати много ресурсов CPU & RAM? (или ещё чего)
0.4. Стабильно работает?
0.5. Можете пожалуйста показать как выглядит запрос аналогичный известному "взять строку с удалением" (я думаю должен быть более привлекательный аналог, например строку залочить на время)
  1. Да это звучит очень привлекательно так работать, одно время через PHP прослойку делал костыли, понравилось очень.
    1. Overhead в таком случае большой? Ведь нам надо стучать на удалённый сервер каждый раз если база удалённая
    2. Как с анонимностью вопрос, всё это напрямую улетает и провайдер всё видит получается, или же есть там что-то вроде SSH туннеля для шифрования трафика?
    3. Автор mysql делал свою версию - mariadb, это дело имеет смысл использовать или нет?
    4. Реально могут быть ли проблемы при большом многопотоке? Например 500 потоков одновременно ломятся в базу взять что-то для обработки, и возникает конкуренция (например 2 потока одни и те же данные взяли)
    5. Какие вообще узкие места есть у этой технологии? Плюсы вы хорошо описали, нужно знать минусы :-)
  2. +
  3. +
  4. Что за тамп?
 
Последнее редактирование:
3.sqilte текущими инструментами подключить можно?
  1. Скачиваем и устанавливаем драйвер http://www.ch-werner.de/sqliteodbc/sqliteodbc.exe
  2. В экшене "Базы данных" выбираем провайдер "Odbc".
  3. Строка подключения выглядит так:
    DRIVER=SQLite3 ODBC Driver;Database=D:\MyDatabase.db;
 
Благодарю очень за ответы! Они породили новые вопросы :-)

0.1. По SSD - как гемор снимает то?
0.2. База же в оперативке вертится?
0.3. Жрёт кстати много ресурсов CPU & RAM? (или ещё чего)
0.4. Стабильно работает?
0.5. Можете пожалуйста показать как выглядит запрос аналогичный известному "взять строку с удалением" (я думаю должен быть более привлекательный аналог, например строку залочить на время)
  1. Да это звучит очень привлекательно так работать, одно время через PHP прослойку делал костыли, понравилось очень.
    1. Overhead в таком случае большой? Ведь нам надо стучать на удалённый сервер каждый раз если база удалённая
    2. Как с анонимностью вопрос, всё это напрямую улетает и провайдер всё видит получается, или же есть там что-то вроде SSH туннеля для шифрования трафика?
    3. Автор mysql делал свою версию - mariadb, это дело имеет смысл использовать или нет?
    4. Реально могут быть ли проблемы при большом многопотоке? Например 500 потоков одновременно ломятся в базу взять что-то для обработки, и возникает конкуренция (например 2 потока одни и те же данные взяли)
    5. Какие вообще узкие места есть у этой технологии? Плюсы вы хорошо описали, нужно знать минусы :-)
  2. +
  3. +
  4. Что за тамп?
01 + 02 Ну там произвольный доступ быстрее поэтому она быстрее заметно крутится на SSD, т.к. база не в памяти (если это не хип/новое название меморис (но тогда при глюке или ребуте оно сдыхает)) - в памяти только индексы, если её достаточно выделено (в конфиге)...
03 Жрет от размеров и запросов (для джоинов нужно много памяти т.к. если они туда не влезут то будет на диске временная табличка=тормоза) и индексов, полнотекстовый сасет вообще (перешел на сфинкс) и рендомные глючат на больших объемах (сфинкс тоже быстрее).
04 Стабильно работает.
05 да там лок базы http://www.mysql.ru/docs/man/LOCK_TABLES.html на время такой операции, а так сначало селект, потом делет, но я предпочитаю апдейтить (у меня везде поле статус) тогда можно разобраться потом что да не так пошло или если был фейл в шаблоне то просто поле статуса еще раз поменял и можно попробовать еще раз.
Еще узкое место теже джоины, она сначало объединяет все таблицы - по сути появляется новая временная табличка часто очень неебовых размеров если она не влезла в отведенное пространство в памяти она пишется на диск, а потом делает там выборку, логичнее было сделать наоборот (в начале выборка потом объединение того что попало), обещали исправить... такая же фигня при сортировке :)

1. +1.2 Я так через пхп прослойку и работаю... вот там то я могу загнать траф хоть через ssh :-) напрямую ток через внп до сервака )
1.1. Ну оверхед у тебя в выдаче по сути как бы можешь с консоли зайти на mysql и посмотреть что она выдает, через php может хоть gzip пожать )
1.3. я хз не слышал даже.
1.4+ 1.5. При локе не может одновременно скосячить.
Помимо полнотекстового поиска узкие места тут размер базы, а так она может встать и при 1 запросе в секунду, особенно если много апдейтов, тогда надо большую базу бить на части если железо не помогает.
22,132,558 MyISAM 2.3 GiB - вот такая база например на 1230v2 +HDD встает при 50 апдейтах в секунду, на ссд живет :-)


4. Тю очепятлся не тамп, а дамп (dump) :-)
 
  • Оценить
Реакции: SilverSun и CSS
01 + 02 Ну там произвольный доступ быстрее поэтому она быстрее заметно крутится на SSD, т.к. база не в памяти (если это не хип/новое название меморис (но тогда при глюке или ребуте оно сдыхает)) - в памяти только индексы, если её достаточно выделено (в конфиге)...
03 Жрет от размеров и запросов (для джоинов нужно много памяти т.к. если они туда не влезут то будет на диске временная табличка=тормоза) и индексов, полнотекстовый сасет вообще (перешел на сфинкс) и рендомные глючат на больших объемах (сфинкс тоже быстрее).
04 Стабильно работает.
05 да там лок базы http://www.mysql.ru/docs/man/LOCK_TABLES.html на время такой операции, а так сначало селект, потом делет, но я предпочитаю апдейтить (у меня везде поле статус) тогда можно разобраться потом что да не так пошло или если был фейл в шаблоне то просто поле статуса еще раз поменял и можно попробовать еще раз.
Еще узкое место теже джоины, она сначало объединяет все таблицы - по сути появляется новая временная табличка часто очень неебовых размеров если она не влезла в отведенное пространство в памяти она пишется на диск, а потом делает там выборку, логичнее было сделать наоборот (в начале выборка потом объединение того что попало), обещали исправить... такая же фигня при сортировке :-)

1. +1.2 Я так через пхп прослойку и работаю... вот там то я могу загнать траф хоть через ssh :-) напрямую ток через внп до сервака )
1.1. Ну оверхед у тебя в выдаче по сути как бы можешь с консоли зайти на mysql и посмотреть что она выдает, через php может хоть gzip пожать )
1.3. я хз не слышал даже.
1.4+ 1.5. При локе не может одновременно скосячить.
Помимо полнотекстового поиска узкие места тут размер базы, а так она может встать и при 1 запросе в секунду, особенно если много апдейтов, тогда надо большую базу бить на части если железо не помогает.
22,132,558 MyISAM 2.3 GiB - вот такая база например на 1230v2 +HDD встает при 50 апдейтах в секунду, на ссд живет :-)


4. Тю очепятлся не тамп, а дамп (dump) :-)
Благодарю за подробный ответ! :-)

Решено - изучаю MySQL, а точнее его форк - MariaDB (#1, #2) которая с ним полностью совместима, только будет круче :-)
 
Последнее редактирование:
  • Оценить
Реакции: Gfoblin
Благодарю за подробный ответ! :-)

Решено - изучаю MySQL, а точнее его форк - MariaDB (#1, #2) которая с ним полностью совместима, только будет круче :-)
Вот и тебе спасибо, озадачу админов пусть посмотрят на MariaDB :)
 
  • Оценить
Реакции: CSS
Благодарю за подробный ответ! :-)

Решено - изучаю MySQL, а точнее его форк - MariaDB (#1, #2) которая с ним полностью совместима, только будет круче :-)
К стате сильно не морочься :-)
https://mariadb.org/maria-10-1-mysql-5-7-commodity-hardware/ - победитель mysql клиент 5.6
У меня 5.5.41, начну с апдейта пожалуй :-)
Но это ридонли тест... у меня другая нагрузка... над тестить кароче
 
  • Оценить
Реакции: CSS
Спасибо большое реализовал уже по другому.
А вот в етом @figa :=
как раз большая плюшка может получится при реализации сложних запросов

вот тут я про них прочитал
http://www.mysql.ru/docs/man/Variables.html

На мой нубский взгляд проблема в том что имя лок переменных начинается с знака @
С такого же знака @
Начинаются использование параметри запроса.

ru:db-pic3.png


Хотя я могу и ошибатся.

Параметры это и есть переменные
Нужно делать так:
56bd935a563d.png

Но он начнет ругаться на двоеточие... насколько я понял это ошибка в библиотеке конектора к MySql.
Я пробовал поставить драйвер ODBC, и там все отрабатывает
 
Решение пришло откуда не ждали))
@svaminar делайте все так как делали сначала (т.е. "Использовать параметры в запросе" не ставьте)
и Ваш запрос заработает если в строку подключения добавите allowuservariables=True
 
Кто нибудь знает как исключить эти переменные из результатов? HeidiSQL выдаёт 2 вкладки, в первой - моя переменная в которой ID строки дёргал, во второй - уже запрос который нужен, а мне нужно получить только мой запрос, без всяких переменных.

PS: для поиска вставлю строчку: Fatal error encountered during command execution.
 
Без примеров непонятно
 
CSS
я чесно не понял твоего вопроса.
Если не трудно.
сам запрос ответ в постере и ответ в в хейду скинь сюда.
 
Без примеров непонятно
CSS
я чесно не понял твоего вопроса.
Если не трудно.
сам запрос ответ в постере и ответ в в хейду скинь сюда.
на входе таблица:
heidisql_2016-02-24_09-17-26.png

делаем запрос:
SQL:
Развернуть Свернуть Копировать
START TRANSACTION;
LOCK TABLES test WRITE;
SELECT @task := id FROM test WHERE id=1 LIMIT 1;
SELECT test.`data` FROM test WHERE id=@task LIMIT 1;
UNLOCK TABLES;
COMMIT;

на выходе получаем две вкладки в HeidiSQL, первая вкладка содержит то что было в нашей переменной:
heidisql_2016-02-24_09-19-18.png

вторая вкладка содержит то что мне нужно (результат работы селекта последнего)
heidisql_2016-02-24_09-20-42.png

Теперь вопрос, как сделать так чтобы переменная (@task) в результатах не выводилась? Либо пусть выводится, но всегда НЕ в первой вкладке.

В постере я вижу такой же ответ как и в первой вкладке HeidiSQL.

Прошу не предлагать мне менять эти запросы местами.
 
Последнее редактирование:
Могу предложить как вариант использовать другую логику.
Добавить в таблицу поле Zennoid Ну или что то похожее.
И вместо селекта после блокировки делать Update поля Zennoid рандомним числовим значением.
Дальше уже по етому уникальному ид и работать с нужной строчкой.
1 кубик упдате поля
2 кубик уже работаем с базой
 
  • Оценить
Реакции: CSS
я так делал чтоб не использовать переменние запроса.
Чисто мое нубское мнения через 2 селекта в 1 запросе. Точнее 2 запроса которие виводят данние.
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)