powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопросы непрофессионала по SQL
37 сообщений из 37, показаны все 2 страниц
Вопросы непрофессионала по SQL
    #40061126
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!
В данном примере осуществляется блокировка на чтение при SELECT до вызова COMMIT? Или нужно применять "FOR UPDATE" в SELECT?
Код: sql
1.
2.
3.
4.
BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061129
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получается, что пример выше аналогичен:
Код: sql
1.
2.
3.
autocommit=false;
...
autocommit=true;
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061131
zby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

Это не MS SQL
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061133
zby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zby
FreeAdman,

Это не MS SQL


Обратитесь в соответствующий форум
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061142
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста
Какая разница между SELECT из нескольких таблиц и применение JOIN LEFT ?
Код: sql
1.
SELECT t1.*, t2.* FROM t1, t2 WHERE t1.i1 = t2.i2
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061149
0wl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
0wl
Гость
FreeAdman,

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

А чем INNER JOIN отличается от LEFT JOIN - за этим в справку или гугл
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061150
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0wl, благодарю!

Получается, разницы между устаревшим видом и INNER нет никакой, попросту использование INNER визуально упрощает \ сокращает вид запроса?
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061156
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LEFT JOIN получается быстрее INNER JOIN? Я правильно понимаю?

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

Да, придётся почитать за JOIN-ы...
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061167
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreeAdman
LEFT JOIN получается быстрее INNER JOIN? Я правильно понимаю?

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

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

Имел ввиду, что сначала выборка идёт в `t1`, потом в `t2` без возврата обратно в `t1`. Иначе говоря этоЮ если я правильно представляю, это подобно 3-м SELECT
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061170
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А подскажите, пожалуйста, какой вариант лучше применять для выборки 1 поля из нескольких (3+) таблиц? (интересно ваше мнение и совет)

Когда в одном поле - id поля из другой таблицы
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061174
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman
А подскажите, пожалуйста, какой вариант лучше применять для выборки 1 поля из нескольких (3+) таблиц? (интересно ваше мнение и совет)

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


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

в целом ваше направление размышлений в верном направлении
авторвыборка при LEFT получается только в одну сторону вида t1 -> t2 -> t3?
но для полного понимания прочитать надо про все способы соединений
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061177
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала разберитесь, что у Вас за СУБД.
Если вдруг MS SQL Server - то пройдите курс https://www.specialist.ru/course/m20461
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061180
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DaniilSeryi,

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

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061201
zby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

Вот вам про джойны наглядно
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061206
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Красиво, только не совсем понятно. Красным что обозначается?
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061220
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
результат запроса на примере множеств
(вместо таблиц)
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061238
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде бы разобрался. Делаю несколько вложенных LEFT JOIN и норм.

Благодарю всех!
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061253
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreeAdman
Добрый вечер!
В данном примере осуществляется блокировка на чтение при SELECT до вызова COMMIT? Или нужно применять "FOR UPDATE" в SELECT?
Код: sql
1.
2.
3.
4.
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 в исходное?

И, как я понимаю, пример выше не блокирует таблицу на чтение ?
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061276
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О блокировках. Например. У нас есть таблица users. При регистрации проверяем наличие логина в БД.
И дабы недопустить фантомные записи, я так понимаю, пример из доки ниже то что нужно для InnoDB

Код: sql
1.
2.
3.
4.
5.
SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
... do something with tables t1 and t2 here ...
COMMIT;
UNLOCK TABLES;



В данном примере мы блокируем на чтение (ну и запись) "t1" т.е. users, а второй поток по идее будет висеть в ожидании разблока таблицы.
И "FOR UPDATE" конкретно в этой ситуации не подходит
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061567
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

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


Если надо по нескольким типам, то mysql может делать update по таблице и подзапросу.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061847
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

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

только от фантомов ваш пример сильно помогает? Сомневаюсь.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40061880
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman
только от фантомов ваш пример сильно помогает?

От кого помогает, простите?
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40065425
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
INNER и LEFT могут давать одинаковый результат. В чём тогда разница?
Зачем эти ДЖОЙНЫ, если можно перечислить все таблицы в FROM ? Тот же INNER как писали выше.
Картинки ваши с интернета не поясняют ничего.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40065447
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

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

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

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

здесь https://dbfiddle.uk/?rdbms=mysql_8.0 можно создать пару таблиц и поиграться вдоволь.
------------------ добавлено ------------------
FROM TabA, TabB = FROM TabA INNER JOIN TabAB
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40065448
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov,
Ясно. Так понятней.

Тогда вопрос. А в чём фишка RIGHT и LEFT ?
Ведь запрос можно составить так, что LEFT даст такой же результат как RIGHT и наоборот.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40065449
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreeAdman
Alex_Ustinov,
Ясно. Так понятней.

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


Вроде бы додумал
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40065450
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

--- А в чём фишка RIGHT и LEFT ?
да, это наоборот
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40068007
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильно ли я понимаю, что числа в MySQL хранятся в виде строки?
Иначе зачем при создании числового типа указывать длину???
Если это INT без знака, то длина 10, если со знаком - тогда 11.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40068010
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman
Правильно ли я понимаю, что числа в MySQL хранятся в виде строки?
Нет. Числа хранятся как двоичные данные.

FreeAdman
Иначе зачем при создании числового типа указывать длину???
Например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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)
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40068011
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, т.е. разницы между int и bigint нет? int длиной 20 аналогичен bigint?
т.е. int и bigint - это просто шаблоны длины?
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40068013
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

Ну откройте же доку хоть чуть-чуть!
https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.htmlFor 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.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40068014
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
накой мне дока, когда там водопад американской воды?
ИТшники могут же в двух словах между собой нормально объяснить

PS: читайте внимательно вопрос. INT и BIGINT получаются ШАБЛОНЫ ДЛИНЫ, а вы мне про вместимость того и иного типа
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40068016
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle
Числа хранятся как двоичные данные.


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

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

Получается, что 11-й байт - это флаг для самой БД что ли
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40068064
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman
накой мне дока, когда там водопад американской воды?
Неправда, у MySQL очень приличная дока. Не идеальная, но приличная.
FreeAdman
INT и BIGINT получаются ШАБЛОНЫ ДЛИНЫ, а вы мне про вместимость того и иного типа
И вместимость не зависит от того, что вы называете шаблоном длины.
Потому что это длина для отображения. И применяется она почти только в консольном клиенте mysql.
Для всех остальных INT - 4-байтовое целое, BIGINT - 8-байтовое целое.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40068076
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы скорее даже процитировал соседнюю страницу документации , где прямым текстом всё пояснено:
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 для СУБД. Атрибут в скобках может , при соответствующей реализации, использоваться клиентом. А самой базе оно ни для чего не нужно.
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40068094
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! :)
...
Рейтинг: 0 / 0
Вопросы непрофессионала по SQL
    #40068159
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman
miksoft,
накой мне дока, когда там водопад ...
ИТшники могут же в двух словах между собой нормально объяснить

помню работал в организации где начальник отдела кадров перед принятием решения ходила в бухгалтерию и в плановый отдел, спрашивала - А что же делать? Потом собирала средне-арифметическое и так и делала...
Тоже не верила "законной документации")
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопросы непрофессионала по SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]