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

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

Тогда вопрос. А в чём фишка RIGHT и LEFT ?
Ведь запрос можно составить так, что LEFT даст такой же результат как RIGHT и наоборот.


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

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

--- А в чём фишка RIGHT и LEFT ?
да, это наоборот
24 апр 21, 16:43    [22313636]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Правильно ли я понимаю, что числа в MySQL хранятся в виде строки?
Иначе зачем при создании числового типа указывать длину???
Если это INT без знака, то длина 10, если со знаком - тогда 11.
3 май 21, 01:37    [22317688]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
vkle
Member

Откуда: Самара
Сообщений: 15049
FreeAdman
Правильно ли я понимаю, что числа в MySQL хранятся в виде строки?
Нет. Числа хранятся как двоичные данные.

FreeAdman
Иначе зачем при создании числового типа указывать длину???
Например:
MariaDB [test]> create table `bbbbb` (`f1`int, `f2` int(5) zerofill, `f3` int(20) zerofill);
Query OK, 0 rows affected (0.592 sec)

MariaDB [test]> insert into `bbbbb` values (1, 1, 1);
Query OK, 1 row affected (0.002 sec)

MariaDB [test]> insert into `bbbbb` values (123456789, 123456789, 123456789);
Query OK, 1 row affected (0.002 sec)

MariaDB [test]> select * from `bbbbb`;
+-----------+-----------+----------------------+
| f1        | f2        | f3                   |
+-----------+-----------+----------------------+
|         1 |     00001 | 00000000000000000001 |
| 123456789 | 123456789 | 00000000000123456789 |
+-----------+-----------+----------------------+
2 rows in set (0.001 sec)
3 май 21, 02:09    [22317692]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
vkle, т.е. разницы между int и bigint нет? int длиной 20 аналогичен bigint?
т.е. int и bigint - это просто шаблоны длины?

Сообщение было отредактировано: 3 май 21, 02:26
3 май 21, 02:29    [22317696]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
miksoft
Member

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

Ну откройте же доку хоть чуть-чуть!
https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html
For integer data types, M indicates the maximum display width.
...
INT[(M)] [UNSIGNED] [ZEROFILL]
A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295.
...
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
A large integer. The signed range is -9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615.
3 май 21, 04:01    [22317700]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
miksoft,
накой мне дока, когда там водопад американской воды?
ИТшники могут же в двух словах между собой нормально объяснить

PS: читайте внимательно вопрос. INT и BIGINT получаются ШАБЛОНЫ ДЛИНЫ, а вы мне про вместимость того и иного типа

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

Откуда:
Сообщений: 158
vkle
Числа хранятся как двоичные данные.


тогда я не понимаю, зачем выделять 1 байт для знакового числа ? ))

т.е. int(10) без знака и int(11) для знака

Получается, что 11-й байт - это флаг для самой БД что ли

Сообщение было отредактировано: 3 май 21, 04:14
3 май 21, 04:21    [22317703]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
miksoft
Member

Откуда:
Сообщений: 38828
FreeAdman
накой мне дока, когда там водопад американской воды?
Неправда, у MySQL очень приличная дока. Не идеальная, но приличная.
FreeAdman
INT и BIGINT получаются ШАБЛОНЫ ДЛИНЫ, а вы мне про вместимость того и иного типа
И вместимость не зависит от того, что вы называете шаблоном длины.
Потому что это длина для отображения. И применяется она почти только в консольном клиенте mysql.
Для всех остальных INT - 4-байтовое целое, BIGINT - 8-байтовое целое.
3 май 21, 13:29    [22317775]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1312
Я бы скорее даже процитировал соседнюю страницу документации, где прямым текстом всё пояснено:
MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4) specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets. Whether it is used is up to the application.)

The display width does not constrain the range of values that can be stored in the column. Nor does it prevent values wider than the column display width from being displayed correctly. For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range permitted by three digits are displayed in full using more than three digits.


int(10) вообще никак не отличается от int(11) или int(1) - это всё один и тот же int для СУБД. Атрибут в скобках может, при соответствующей реализации, использоваться клиентом. А самой базе оно ни для чего не нужно.
3 май 21, 14:02    [22317791]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
FreeAdman
Member

Откуда:
Сообщений: 158
Спасибо! :)
3 май 21, 14:44    [22317823]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы непрофессионала по SQL  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3799
FreeAdman
miksoft,
накой мне дока, когда там водопад ...
ИТшники могут же в двух словах между собой нормально объяснить

помню работал в организации где начальник отдела кадров перед принятием решения ходила в бухгалтерию и в плановый отдел, спрашивала - А что же делать? Потом собирала средне-арифметическое и так и делала...
Тоже не верила "законной документации")
3 май 21, 20:43    [22317958]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / MySQL Ответить