Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Добрый вечер!
В данном примере осуществляется блокировка на чтение при SELECT до вызова COMMIT? Или нужно применять "FOR UPDATE" в SELECT?
BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;


Сообщение было отредактировано: 9 апр 21, 17:47
9 апр 21, 17:51    [22306644]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Получается, что пример выше аналогичен:
autocommit=false;
...
autocommit=true;


Сообщение было отредактировано: 9 апр 21, 17:50
9 апр 21, 17:57    [22306649]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
zby
Member

Откуда: Мск
Сообщений: 105
FreeAdman,

Это не MS SQL
9 апр 21, 18:00    [22306651]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
zby
Member

Откуда: Мск
Сообщений: 105
zby
FreeAdman,

Это не MS SQL


Обратитесь в соответствующий форум
9 апр 21, 18:01    [22306653]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Подскажите, пожалуйста
Какая разница между SELECT из нескольких таблиц и применение JOIN LEFT ?
SELECT t1.*, t2.* FROM t1, t2 WHERE t1.i1 = t2.i2
9 апр 21, 18:33    [22306664]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
0wl
Member

Откуда:
Сообщений: 90
FreeAdman,

"список таблиц" - это устаревший способ записать INNER JOIN.

А чем INNER JOIN отличается от LEFT JOIN - за этим в справку или гугл
9 апр 21, 18:43    [22306673]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
0wl, благодарю!

Получается, разницы между устаревшим видом и INNER нет никакой, попросту использование INNER визуально упрощает \ сокращает вид запроса?

Сообщение было отредактировано: 9 апр 21, 18:41
9 апр 21, 18:48    [22306679]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
LEFT JOIN получается быстрее INNER JOIN? Я правильно понимаю?

Т.е. выборка при LEFT получается только в одну сторону вида t1 -> t2 -> t3?

Да, придётся почитать за JOIN-ы...
9 апр 21, 18:56    [22306685]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
FreeAdman
LEFT JOIN получается быстрее INNER JOIN? Я правильно понимаю?

Т.е. выборка при LEFT получается только в одну сторону вида t1 -> t2 -> t3?

Да, придётся почитать за JOIN-ы...

Имел ввиду, что сначала выборка идёт в `t1`, потом в `t2` без возврата обратно в `t1`. Иначе говоря этоЮ если я правильно представляю, это подобно 3-м SELECT
9 апр 21, 19:13    [22306696]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
А подскажите, пожалуйста, какой вариант лучше применять для выборки 1 поля из нескольких (3+) таблиц? (интересно ваше мнение и совет)

Когда в одном поле - id поля из другой таблицы

Сообщение было отредактировано: 9 апр 21, 19:11
9 апр 21, 19:17    [22306700]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
MoonRabbit
Member

Откуда:
Сообщений: 796
FreeAdman
А подскажите, пожалуйста, какой вариант лучше применять для выборки 1 поля из нескольких (3+) таблиц? (интересно ваше мнение и совет)

Когда в одном поле - id поля из другой таблицы


LEFT и INNER это не про скорость
это про разные, абсолютно разные способы соединения таблиц, которые приводят к разным результирующим значениям

в целом ваше направление размышлений в верном направлении
автор
выборка при LEFT получается только в одну сторону вида t1 -> t2 -> t3?

но для полного понимания прочитать надо про все способы соединений
9 апр 21, 19:31    [22306709]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1932
Сначала разберитесь, что у Вас за СУБД.
Если вдруг MS SQL Server - то пройдите курс https://www.specialist.ru/course/m20461
9 апр 21, 19:33    [22306714]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
DaniilSeryi,

ну как это разберитесь ? MySQL! Модератора попросил перенести тему.

Модератор: Тема перенесена из форума "Microsoft SQL Server".


Сообщение было отредактировано: 9 апр 21, 19:38
9 апр 21, 19:35    [22306719]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
zby
Member

Откуда: Мск
Сообщений: 105
FreeAdman,

Вот вам про джойны наглядно

К сообщению приложен файл. Размер - 67Kb
9 апр 21, 20:17    [22306743]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Красиво, только не совсем понятно. Красным что обозначается?
9 апр 21, 20:25    [22306748]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3799
результат запроса на примере множеств
(вместо таблиц)

Сообщение было отредактировано: 9 апр 21, 21:20
9 апр 21, 21:27    [22306768]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Вроде бы разобрался. Делаю несколько вложенных LEFT JOIN и норм.

Благодарю всех!

Сообщение было отредактировано: 9 апр 21, 22:22
9 апр 21, 22:29    [22306791]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
FreeAdman
Добрый вечер!
В данном примере осуществляется блокировка на чтение при SELECT до вызова COMMIT? Или нужно применять "FOR UPDATE" в SELECT?
BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;


Подскажите, плиз, я правильно понимаю, что "BEGIN WORK" - это некий локальный аналог "autocommit=false", а COMMIT при том возвращает autocommit в исходное?

И, как я понимаю, пример выше не блокирует таблицу на чтение ?

Сообщение было отредактировано: 9 апр 21, 23:06
9 апр 21, 23:11    [22306808]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
О блокировках. Например. У нас есть таблица users. При регистрации проверяем наличие логина в БД.
И дабы недопустить фантомные записи, я так понимаю, пример из доки ниже то что нужно для InnoDB

SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
... do something with tables t1 and t2 here ...
COMMIT;
UNLOCK TABLES;


В данном примере мы блокируем на чтение (ну и запись) "t1" т.е. users, а второй поток по идее будет висеть в ожидании разблока таблицы.
И "FOR UPDATE" конкретно в этой ситуации не подходит

Сообщение было отредактировано: 10 апр 21, 00:05
10 апр 21, 00:10    [22306837]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 2337
FreeAdman,

Не надо танцевать с тарзакциями. Вот так попробуй:
update summary = (select sum(salary) from table1 where type = 1) where type = 1;

Если надо по нескольким типам, то mysql может делать update по таблице и подзапросу.

Сообщение было отредактировано: 12 апр 21, 08:02
12 апр 21, 08:10    [22307411]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
crutchmaster,

то был пример с другого сайта. Ваш запрос мне ни к чему

только от фантомов ваш пример сильно помогает? Сомневаюсь.

Сообщение было отредактировано: 12 апр 21, 22:21
12 апр 21, 22:25    [22307872]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 2337
FreeAdman
только от фантомов ваш пример сильно помогает?

От кого помогает, простите?
13 апр 21, 04:05    [22307925]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
INNER и LEFT могут давать одинаковый результат. В чём тогда разница?
Зачем эти ДЖОЙНЫ, если можно перечислить все таблицы в FROM ? Тот же INNER как писали выше.
Картинки ваши с интернета не поясняют ничего.
24 апр 21, 15:25    [22313599]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3799
FreeAdman,

смотрим на картинку выше (с кружочками)

LEFT отдает ВСЮ Левую Таблицу и присоединяет записи Правой Таблицы по условию Соеднинения, где условие не выполняется - будет NULL для Правой Таблицы

INNER отдает только те записи из Левой и Правой, которые проходят по условию соединения

здесь https://dbfiddle.uk/?rdbms=mysql_8.0 можно создать пару таблиц и поиграться вдоволь.
------------------ добавлено ------------------
FROM TabA, TabB = FROM TabA INNER JOIN TabAB

Сообщение было отредактировано: 24 апр 21, 16:34
24 апр 21, 16:39    [22313631]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Alex_Ustinov,
Ясно. Так понятней.

Тогда вопрос. А в чём фишка RIGHT и LEFT ?
Ведь запрос можно составить так, что LEFT даст такой же результат как RIGHT и наоборот.
24 апр 21, 16:41    [22313633]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / MySQL Ответить