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

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 норм отрабатывает, а в прожект мейкере ошибка


Подозреваю из за
Какой правильней синтаксис.
Или подскажите как исправить запрос чтоб не юзать
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 912
Баллы
113
О! Первый пользователь баз данных)
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 912
Баллы
113
Код:
SELECT @figa := `data` FROM Table_1_copy LIMIT 1;
А что это за строка такая? для SElECT формат такой - SELECT column_name(s) FROM table1;
 

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
да на сайте каком то нашел.
Вроде пишет в figa значения полученой строчки, а потом можно использовать figa для удаления.
Хочу получить строку в переменную и потом ее сразу удалить одним запросом с блокировкой.

В хейде код отрабативает, а в посере никак.
______
Кажется эта штука @figa називается
локальные переменные в запросе
 
Последнее редактирование:

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
Ребята подскажите кто знает плиз :ah:
Хочу получить строку в и потом ее сразу удалить одним запросом с блокировкой.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Поставил таску программисту, кто реализовывал работу с БД в программе.
Как получу ответ отпишу вам. Не раньше следующей недели, к сожалению, точно.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Получил фидбек от другого программиста:

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

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
Ростоникс
Извини если говорю глупость, так как я не програмист и может ошибаюсь.

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

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

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Ростоникс
Извини если говорю глупость, так как я не програмист и может ошибаюсь.

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

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

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

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
А с мусколом работать просто шикарно. Никаких фалйов таблиц и глюков. С любого места запускай шаблони и работай. А если еще и хранить настройки шаблонов в бд то просто сказка получается.
Самое шикарное в етом обновлении.
 
  • Спасибо
Реакции: SilverSun, Astraport и CSS

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
Спасибо большое реализовал уже по другому.
А вот в етом @figa :=
как раз большая плюшка может получится при реализации сложних запросов

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

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



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

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
А с мусколом работать просто шикарно. Никаких фалйов таблиц и глюков. С любого места запускай шаблони и работай. А если еще и хранить настройки шаблонов в бд то просто сказка получается.
Самое шикарное в етом обновлении.
Да, базы тема ) Сам только с прошлого года юзаю, но не могу нарадоваться)
 
  • Спасибо
Реакции: SilverSun, CSS и svaminar

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Спасибо большое реализовал уже по другому.
А вот в етом @figa :=
как раз большая плюшка может получится при реализации сложних запросов

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

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



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

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
А с мусколом работать просто шикарно. Никаких фалйов таблиц и глюков. С любого места запускай шаблони и работай. А если еще и хранить настройки шаблонов в бд то просто сказка получается.
Самое шикарное в етом обновлении.
С многопоточностью проблем нет? Особенно если у нас многопоточная запись.

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

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
С многопоточностью проблем нет? Особенно если у нас многопоточная запись.


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

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Про многопоточность и не только - гимор возникает при апдейтах больших баз, она может тупо встать там надо юзать 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. Что за тамп?
 
Последнее редактирование:

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63
3.sqilte текущими инструментами подключить можно?
  1. Скачиваем и устанавливаем драйвер http://www.ch-werner.de/sqliteodbc/sqliteodbc.exe
  2. В экшене "Базы данных" выбираем провайдер "Odbc".
  3. Строка подключения выглядит так:
    DRIVER=SQLite3 ODBC Driver;Database=D:\MyDatabase.db;
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Благодарю очень за ответы! Они породили новые вопросы :-)

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

myweb101

Client
Регистрация
29.04.2013
Сообщения
175
Благодарностей
30
Баллы
28

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
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

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Благодарю за подробный ответ! :-)

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

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Благодарю за подробный ответ! :-)

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

AShaggy

Активный пользователь
Регистрация
25.11.2014
Сообщения
335
Благодарностей
143
Баллы
43
Спасибо большое реализовал уже по другому.
А вот в етом @figa :=
как раз большая плюшка может получится при реализации сложних запросов

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

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



Хотя я могу и ошибатся.
Параметры это и есть переменные
Нужно делать так:

Но он начнет ругаться на двоеточие... насколько я понял это ошибка в библиотеке конектора к MySql.
Я пробовал поставить драйвер ODBC, и там все отрабатывает
 

AShaggy

Активный пользователь
Регистрация
25.11.2014
Сообщения
335
Благодарностей
143
Баллы
43
Решение пришло откуда не ждали))
@svaminar делайте все так как делали сначала (т.е. "Использовать параметры в запросе" не ставьте)
и Ваш запрос заработает если в строку подключения добавите allowuservariables=True
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Кто нибудь знает как исключить эти переменные из результатов? HeidiSQL выдаёт 2 вкладки, в первой - моя переменная в которой ID строки дёргал, во второй - уже запрос который нужен, а мне нужно получить только мой запрос, без всяких переменных.

PS: для поиска вставлю строчку: Fatal error encountered during command execution.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Без примеров непонятно
 

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
CSS
я чесно не понял твоего вопроса.
Если не трудно.
сам запрос ответ в постере и ответ в в хейду скинь сюда.
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Без примеров непонятно
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.

Прошу не предлагать мне менять эти запросы местами.
 
Последнее редактирование:

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
Могу предложить как вариант использовать другую логику.
Добавить в таблицу поле Zennoid Ну или что то похожее.
И вместо селекта после блокировки делать Update поля Zennoid рандомним числовим значением.
Дальше уже по етому уникальному ид и работать с нужной строчкой.
1 кубик упдате поля
2 кубик уже работаем с базой
 
  • Спасибо
Реакции: CSS

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
я так делал чтоб не использовать переменние запроса.
Чисто мое нубское мнения через 2 селекта в 1 запросе. Точнее 2 запроса которие виводят данние.
 

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