Базы данных. MySQL. Транзакции

Поділитися
Вставка
  • Опубліковано 15 чер 2020
  • Презентация:
    docs.google.com/presentation/...
    Практика:
    Реализуем несколько транзакций с
    - UPDATE
    - DELETE
    - INSERT
    - SELECT ... FOR SHARE
    - SELECT ... FOR UPDATE
    В этом занятии:
    - Определение
    - ACID
    - Команды
    - START TRANSACTION / BEGIN
    - COMMIT
    - ROLLBACK
    - SAVEPOINT
    - Пример
    - Уровни изоляции
    - SET TRANSACTION
    - FOR UPDATE
    - Лок таблиц
    - Deadlock
    - WAL
    По любым вопросам, связанным с курсом можно писать на почту: okulov@rclass.pro
    Личный канал Антона: / @about-code

КОМЕНТАРІ • 65

  • @alexsemenov4658
    @alexsemenov4658 3 роки тому +21

    26:24 неправильно. Write блокирует на чтение и запись всем кроме процесса который получил блокировку. Read блокирует на запись всем включаяя сам процесс - все могут только читать

    • @Rclass
      @Rclass  3 роки тому +8

      Отличное замечание - оговорился/просмотрел, в закреп!

  • @JGolt
    @JGolt 2 роки тому +11

    Спасибо за такой курс по SQL. Очень полезно и инфомративно! Отдельная благодарность за презентации, буду пересматривать для закрепления материала.

    • @Rclass
      @Rclass  2 роки тому

      Спасибо, мы старались :)

  • @avesha5095
    @avesha5095 Рік тому +10

    Эти уроки, а особенно преподаватель - самородок! Всё очень доступно и доходчиво. Браво! 👍

    • @Rclass
      @Rclass  Рік тому +1

      Спасибо большое :)

  • @kostiantynrudnyk9431
    @kostiantynrudnyk9431 Рік тому +4

    Спасибо, все четко по делу и с хорошей презентацией. Жду новые лекции

    • @Rclass
      @Rclass  Рік тому +1

      Спасибо, мы старались :)

  • @vyacheslavaverkin5799
    @vyacheslavaverkin5799 3 роки тому +9

    Про финансовые транзакции очень интересно!

    • @Rclass
      @Rclass  3 роки тому +5

      Как-нибудь обязательно расскажем ;)

    • @mint_ukr
      @mint_ukr 3 роки тому

      @@Rclass ждёмс

  • @AndyMazik
    @AndyMazik 2 роки тому +2

    Большое спасибо! Это самое понятное объяснение из тех, что я встречал!

    • @Rclass
      @Rclass  2 роки тому +1

      Спасибо, мы старались :)

  • @antony.dmr97
    @antony.dmr97 3 роки тому +12

    Красавчик, очень полезное видео, однозначно лайк

    • @Rclass
      @Rclass  3 роки тому

      Спасибо, мы старались ^_^

  • @ilya_dikushnikov
    @ilya_dikushnikov 2 роки тому +1

    Спасибо за урок!
    Все понятно и крайне необходимо!))

    • @Rclass
      @Rclass  2 роки тому

      Спасибо, мы старались :)

  • @viktors01
    @viktors01 3 роки тому +2

    Спасибо) Все очень доходчиво! 🔥

    • @Rclass
      @Rclass  3 роки тому +1

      Спасибо, мы старались :)

  • @RuslanSkiraUkraine
    @RuslanSkiraUkraine 3 роки тому +1

    Очень благодарен за видос! зашло.

    • @Rclass
      @Rclass  3 роки тому +3

      Спасибо, мы старались ^_^

  • @user-ec1bu8fi9j
    @user-ec1bu8fi9j 2 роки тому

    Качественно и понятно, спасибо

    • @Rclass
      @Rclass  2 роки тому

      Спасибо, мы старались :)

  • @straher
    @straher 3 роки тому +2

    У вас отличные материалы! Спасибо!

    • @Rclass
      @Rclass  3 роки тому

      Спасибо, мы старались ^_^

  • @user-yf5ip7td2y
    @user-yf5ip7td2y 9 місяців тому +1

    Как круто он обьсняет

    • @Rclass
      @Rclass  9 місяців тому

      Спасибо, мы старались :)

  • @sergevstigneev
    @sergevstigneev 2 роки тому

    Добрый день! Спасибо за отличные ролики! Очень круто! Есть одно замечание-предложение. В видео показывать ссылки (а они же не кликается), особенно на Вики - история странная. Понятное дело, что ссылки можно продублировать в описание, но вот в в видео или надо короткие ссылки вставлять, или QR-коды. Успехов в развитии канала!!!

    • @Rclass
      @Rclass  2 роки тому +3

      Спасибо за отклик! Суть в том, что ко всем докладам презентация прикладывается в описание и перейти можно оттуда. Можно даже сказать что презентация чаще всего используется как рабочий материал при выполнении заданий - там даже код специально не скриншотами натыкан, а текстом оформлен :) Но задумаемся, спасибо.

  • @abdulmajitkubatbekov5731
    @abdulmajitkubatbekov5731 2 роки тому +1

    Спасибо большое

    • @Rclass
      @Rclass  2 роки тому

      Спасибо что смотрите :) Мы для вас старались :)

  • @ProRezak
    @ProRezak 4 роки тому

    Полезно

  • @mr.cannabis471
    @mr.cannabis471 4 роки тому +1

    гуд

  • @Liaksiejka
    @Liaksiejka Рік тому +1

    Что-то мало вопросов интересных было (понятно что в мануалах всё написано будет но)
    Как deadlock в итоге разрулится-то - какая из транзакций зафейлиться в итоге?
    Вот есть транзакция которая блокирует одну строку - делает сэйв поинт - блокирует вторую строку. Понятное дело сейчас заблокировано две строки. А если сделать ролбак на сейвпонит - будет ли заблокирована вторая строка?
    Я никогда не слышал о сериалайзбл блокировке но не важно, так при этой блокировке нельзя будет и со слейва читать?
    По ходу курса не слышал (а может прослушал) про master/slave, master+master, view. так же не понял что такое ключ и нафига он вообще нужен почему нужно считать длину ключа и почему это важно.
    Судя по аудитории им было очень интересно и полезно и без того.
    Спасибо

    • @Rclass
      @Rclass  Рік тому +1

      Добрый день!
      Курс ознакомительный, поэтому много чего нет. Те же хранимки например)

  • @xoxot_shamana
    @xoxot_shamana Рік тому

    Спасибо

    • @Rclass
      @Rclass  Рік тому

      Всегда пожалуйста :)

  • @dim3787
    @dim3787 9 місяців тому +1

    24:50 - мне одному показалось, что автор объясняет тут про FOR UPDATE, а не про FOR SHARE?

    • @millkiway3682
      @millkiway3682 3 місяці тому

      У него каждую минуту по ошибке или не верному высказыванию

  • @ivanshipilov4265
    @ivanshipilov4265 2 роки тому

    Я так понимаю. Играет кто-то по сети и тут идет запланированное ТО и накатывают патч. Все Юзеры получают LOCK TABLES и начинают грустить. Правильно?

  • @valchonok
    @valchonok Рік тому

    Совсем непонятно на 21:57 что происходит. Там в начале первый пользователь коммитит, а потом вторым пользователем выполняется команда UPDATE? Или второй пользователь до коммита первого проводит операцию? Я учусь, и для меня это неочевидно. Хотелось бы, чтобы не нужно было строить догадок.

  • @ianisforis
    @ianisforis 10 місяців тому

    Возможна ошибка. Насколько я знаю for update это не MVCC, for update - это пессимистическая блокировка на строку, а MVCC - это оптимистическая блокировка по полю version, пример SET name = 'A',
    version = version + 1
    WHERE id = 1 AND version = 1

  • @if_xx
    @if_xx 3 роки тому +1

  • @erwererwrwr
    @erwererwrwr 2 роки тому

    Жаль, ссылки из видео не добавлены в описание под видео на ютубе, а так - спасибо большое, у вас неплохо с педагогикой, вы где-то учились отдельно?

    • @Rclass
      @Rclass  2 роки тому

      Спасибо :) Ссылки есть в презентации - там есть всё вплоть до примеров кода. Наш технический директор занятия педагогикой категорически отрицает))

    • @erwererwrwr
      @erwererwrwr 2 роки тому

      @@Rclass увы, самодуров подобного плана много на руководящих постах.
      Скажите, пожалуйста, если во время выполнения транзации , а сервер бэкенда упал. Теперь эта операция с бд заблочится до ребута сервера базы данных?

    • @Rclass
      @Rclass  2 роки тому

      @@erwererwrwr мы имели ввиду что он не занимался педагогикой отдельно) Интересный вопрос, скорее всего операция откатится, но врать не будем - нужно уточнять.

    • @erwererwrwr
      @erwererwrwr 2 роки тому

      @@Rclass спасибо

    • @ilyaponomarev9279
      @ilyaponomarev9279 Рік тому

      @@erwererwrwr если до коммита не дошло, то откатится

  • @Zanozin
    @Zanozin 3 роки тому

    Как можно тестировать блокировки и гонки событий при транзакциях? Я говорю даже не про автотесты, а хотя бы про ручные. Или хотя бы не тесты, а про детализированный пошаговый дебаг.

    • @Zanozin
      @Zanozin 3 роки тому +1

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

    • @Rclass
      @Rclass  3 роки тому

      Как только столкнемся - обязательно попробуем найти для этого подходящий инструмент :)

  • @lyubovDobrinina
    @lyubovDobrinina Рік тому

    Мне несколько раз приходила некотороя сумма, но я делов не знаю, что за переводы, фигурирует Тинькофф, а я с ним не имела делов, это получается они пользуются моими данными? Подскажите пожалуйсто.

    • @Rclass
      @Rclass  Рік тому

      Не совсем поняли о чем вы)

  • @sherman258
    @sherman258 9 місяців тому

    А зачем в задаче 22:57 использовать FOR UPDATE, если можно написать просто SET `balance`.`sum` = `balance`.`sum`. + 1. И по сути можно без FOR UPDATE/SHARE обойтись, ведь неважно какой из запросов выполнится первым, второй все равно будет ждать commit и после этого в update прибавит 1 уже к актуальному балансу?

    • @Rclass
      @Rclass  9 місяців тому

      Задача явно синтетическая была, суть была именно в том чтобы показать как работает)

  • @andreybespalov3629
    @andreybespalov3629 5 місяців тому

    Ребят, а где видос про финансовые операции?

    • @Rclass
      @Rclass  5 місяців тому

      Не сделали(

    • @andreybespalov3629
      @andreybespalov3629 5 місяців тому

      @@Rclass Жаль, очень интересная тема. Попробовав погуглить нашел лишь один видеоролик на эту тему, не более(

    • @Rclass
      @Rclass  5 місяців тому

      @@andreybespalov3629 в целом там все достаточно просто - вести всё двойной записью как в бухгалтерии :) Тогда ничего не возьмется из ниоткуда и не уйдет в никуда)

  • @vladislavvolodin5834
    @vladislavvolodin5834 3 роки тому

    откатится все

  • @Dragonboh1
    @Dragonboh1 3 роки тому

    Я пробовал гуглить про остановку транзакций, так чтот не могу найти, можно ссилку мли какойто термин, ато остановка транзакции либо коміт, ролбек, либо просто статьи про транзакции. В видео ви говорили, что любая длл команда ето остановка транзакции

    • @Rclass
      @Rclass  3 роки тому

      Добрый день! Если вы начали транзакцию, то у нее всего два пути завершения - либо применить все изменения, либо их откатить. Это COMMIT и ROLLBACK соответственно. Опишите поподробнее: какого эффекта вы хотите добиться?

    • @erwererwrwr
      @erwererwrwr 2 роки тому

      @@Rclass добрый, а если бэкенд упал сразу после start transaction, может ли заблочится доступ по этой операции в бд?

  • @millkiway3682
    @millkiway3682 3 місяці тому

    В первых 10 минутах 10 ошибок и не верных терминов.