Relational Database ACID Transactions (Explained by Example)

Поділитися
Вставка

КОМЕНТАРІ • 156

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

    Get my Fundamentals of Database engineering udemy course, head to database.husseinnasser.com for a discount coupon
    Timestamps
    2:00 What is a Transaction?
    4:30 Atomicity
    7:00 Isolation *
    9:30 Isolation - Read phenomena *
    11:40 Dirty Reads
    14:40 Non-repeatable Read
    17:00 Phantom read
    18:53 Isolation Levels*2
    19:20 Read uncommitted
    19:55 Read committed
    21:05 Non-repeatable Read
    23:40 Serializability
    25:00 Isolation Levels vs Read phenomena
    27:45 Consistency
    28:30 Consistency in Data
    33:50 Consistency in Reads
    35:00 Eventual Consistency
    40:30 Durability

  • @justsaysharu
    @justsaysharu 4 роки тому +40

    This is pure GOLD. Literally, one semester subject knowledge in less than an hour! Crazy-or-what :D

  • @hnasr
    @hnasr  4 роки тому +38

    2:00 What is a Transaction?
    4:30 Atomicity
    7:00 Isolation *
    9:30 Isolation - Read phenomena *
    11:40 Dirty Reads
    14:40 Non-repeatable Read
    17:00 Phantom read
    18:53 Isolation Levels*2
    19:20 Read uncommitted
    19:55 Read committed
    21:05 Non-repeatable Read
    23:40 Serializability
    25:00 Isolation Levels vs Read phenomena
    27:45 Consistency
    28:30 Consistency in Data
    33:50 Consistency in Reads
    35:00 Eventual Consistency
    40:30 Durability

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

      Thanks a ton for the gold standard content. I have a question though, In Atomicity, you mentioned if the $100 debited and then the DB crash event occurred, after restart it was $900 w/o credit update query, so when will the rollback occur? After the DB restarts as it seems like if DB crashes, what happened to the Tx state, is it lost or recovered after restart?

  • @bhavanprajapati4773
    @bhavanprajapati4773 4 роки тому +45

    please make videos on indexing and normalization.

  • @jinendrakhabiya2646
    @jinendrakhabiya2646 4 роки тому +8

    Best video on ACID properties. Thanks!

  • @demislam0306
    @demislam0306 Місяць тому

    great content! worth every second!! loved how you always highlighted the fact that its up to the developer to make the tradeoff in deciding what properties to satisfy and what to be loose about. That's basically what software engineering is, it's not just writing codes/queries and declaring models that the orm automatically creates a db out of.

  • @sumeetracharla9316
    @sumeetracharla9316 4 роки тому +22

    you are really a talented person,one of the best video's i have seen in my life :)

    • @hnasr
      @hnasr  4 роки тому +10

      Thank you Sumeet, ! 🙏 I still think I have ways to go. We need to be able to keep an open mind and keep learning.

  • @hashem467
    @hashem467 4 роки тому +35

    I wish you were my uni professor 😂

  • @ameyapatil1139
    @ameyapatil1139 4 роки тому +2

    No way ! No way someone makes a video so good ! Thanks !

  • @shabnamhaque2003
    @shabnamhaque2003 29 днів тому

    hi hussein, a friend of mine introduced me to ur channel 5 days ago and let me tell you I'm hooked. you are doing great great work . Kudossss keep em coming!

  • @Sujankumarreddy
    @Sujankumarreddy 3 роки тому +6

    Why my University doesn't have a professor like you :( You are AMAZING! Thanks for the great content.

  • @ary9344
    @ary9344 4 місяці тому

    Just discovered your channel yesterday, thanks for your videos! I love the way you explain things, not only the what, but also the why, showing us how to think, this will help me in my first job interview :)

  • @aduonye
    @aduonye 4 роки тому +2

    I enjoyed every bit of your lecture especially the lucid examples. Well done! I will be glued to your channel for a long time.

    • @hnasr
      @hnasr  4 роки тому +1

      Thank you Aduonye!! Enjoy the content ❤️

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

    You are a professional at teaching. Thank you !

  • @wh264
    @wh264 3 роки тому +6

    The Isolation part is very interesting. Great examples to help me remember. If I can give a suggestion, a summary at the end to tie all things up would help me remember even better. I'm subscribing and liking for more!

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

      Thanks for the suggestion ❤️ great idea

  • @mind77749
    @mind77749 4 роки тому +1

    wow really nice video, watched all and repeating many parts to understand better. More than one hour is gone! Really love the video!!

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

      Thank you! Glad you are enjoying the content and happy you didn’t get bored 😅

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

    This video literally cleared my fundamentals, have read about this in college, didn't get it clearly understood.
    Thank you @hussein nasser

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

    The best ever tutorial on such a complex topic. Thanks 🙏

  • @mohamedadel936
    @mohamedadel936 8 днів тому

    Really Useful Video.
    Thank You Hussein :)

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

    I used to watch a lot of tech videos before discovering your channel. Now I just want everything to be taught by you, you're a legend sir. Can we please make a video about Distributed Database? I'm really interested in knowing how do we prevent concurrent writes/updates in a distributed db.

  • @SwetPotato
    @SwetPotato 4 роки тому +1

    Thanks for clarifying all these.
    ACID was only on one slide in my Uni database subject and now we are asked to write something about it as part of an assignment.

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

    Best resource to understand acid tranction

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

    Liked your clean examples and Hollywood' style of teaching

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

    Never knew these important things about database. Thanks for such a great explanation !! 😇

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

    Fantastic explanation, I was finally able to understand the isolation level concept and hopefully grasp it. Thank you very much, I have failed the ACID question during several interviews, what eventually led me to your material. Keep up with the great work!

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

      Glad it helps! I also go through more examples and more details on my fundamentals to database engineering udemy course.

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

    This is incredible. I have watched so many of your videos in just few days. Hope you keep making these great content.

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

    Great video! You explained a deeply complex topic really nicely. Thank you.

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

    This is just Gold mate.

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

      enjoy!

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

    Your videos are amazing, great content and marvelous arrangement, thank you very much!

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

      Thank you very much!

  • @cw5948
    @cw5948 4 роки тому +2

    You've got some amazing content here! Good mix of breadth and depth for the topic discussed especially when analyzing isolation. Looking forward to viewing some of your other videos in the playlist, particularly if there's anything comparing SQL and NoSQL databases.

    • @hnasr
      @hnasr  4 роки тому +1

      cw Thanks cw Im glad you noticed because that is what Im doing, trying to go breadth and when I find the topic interesting or on demand I go deep. I am planning to do some more DB videos love those ... thanks for your comment enjoy the content!

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

      @@hnasr thank u

    • @amlanbiswas4526
      @amlanbiswas4526 8 місяців тому

      ​@@hnasr I have a query. When you say versioning, do you mean MVCC? Also, I see that MVCC uses exclusive locks unlike 2PL (uses shared and exclusive) for updates and actually is more difficult to implement and have to address all the anomalies like handling edge cases. For instance, using MVCC, Oracle can only offer Snapshot Isolation, not Seralizable, which has Write Skews.
      Then, does MVCC still stop Phantom Reads and how?

  • @nagame859
    @nagame859 8 місяців тому

    This is quite exceptional!!
    Thank you soo much!!

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

    Thanks, men Thanks a lot for such type of content. this is really appreciated. JazakAllah

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

    Great way of explaining complex things

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

    Thank you so much Hussein!
    Great class!

  • @yarden2096
    @yarden2096 4 місяці тому

    Great video!! I was looking for something like that

  • @user-EricLin0619
    @user-EricLin0619 6 місяців тому

    It's a golden channel

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

    Reached the end 🎉 .. Thanks for the great content ❤️

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

    Finally understood what ACID is

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

    Hats off to you.
    God bless you

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

    Amazing piece of content bro.
    Love that you bring examples and use-cases for each topic, because without a problem those don't worth a whole.
    Hoping to more see videos like this one from you :)

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

    Awsome.. the way you explain things is awsome..👍👍

  • @chenjun4151
    @chenjun4151 4 роки тому +1

    really really really clear explained and helpful!

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

      Happy to hear that!

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

    Good one. I was unable to get much on lost updates concept here.

  • @QuanNguyen-xq1jo
    @QuanNguyen-xq1jo 3 роки тому

    you re awesome ! it helps me understand DB transaction easily

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

    Hussein, you are amazing

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

    thanks for sharing Hussein !

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

    Thank you so much! amazing video!

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

    Hey, thanks man! Really liked the video made allot clear.

  • @kirillzlobin7135
    @kirillzlobin7135 8 місяців тому

    33:26 I remember the time when on UA-cam we could see the "exact" number of subscribers and how I refreshed the page after several seconds on the channels with millions subscribers and this number chaged.
    Now I understand why they moved from this way and started just showing "5M" for example

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

    Thank you for this video.

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

    Paid 6k to UNI and jump back here to get insight into it lol.....Thi is what it is..Thanks for the great video.

  • @rodmajuelojr
    @rodmajuelojr 4 роки тому +2

    True story im watching video when I suddenly had Acid reflux. :( great contenr as always

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

      Ohh get well soon ! Take those nexum

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

    The best. As usual. Thank you

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

      Thanks!!!

  • @B-Billy
    @B-Billy 3 роки тому

    Boss level stuff!!! To the point.

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

    Thank you brother

  • @benjaminkovackeber
    @benjaminkovackeber 4 роки тому +1

    This is a very good video, thank you:)

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

    Nice video and explanation, agree with all except - traditional OLTP databases provides eventual consistency, I dont think any banking system will go for eventual consistency, though postgres has both syncronous(will provicde consistency with perfromancer compromise) and async replciation, but I think thats mostly for HA purpose for banking\critical systems, with these days everything running on VMs, the critical databases are mostly vertically scaled periodically and async sharding/replication is usually used for non critical reads like reporting etc never for banking\critical transactions, so we have no option but to live with these 70s RDBMS systems for some core businesses which require ACID to be stricltly implemeneted.

  • @SanjanaSharma-h7x
    @SanjanaSharma-h7x Рік тому

    Amazing content. thanks!

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

    Thank you
    🙏

  • @asfar1984
    @asfar1984 4 роки тому +1

    I am looking at your videos for over a year, I will love if you touch Storage and big data processing also !! ETL/MapReuce/Hadoop !!

  • @dan-vw4ve
    @dan-vw4ve 4 роки тому +1

    awesome video

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

    thanks! It's super nice and clear :)

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

    This is hilarious, thanks. Very helpful.

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

    thank you!

  • @marrallisa
    @marrallisa 4 роки тому +1

    i love you so much bc you are so funny and helpful

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

    Awesome! can you make video to explain difference between SQL and NoSQL ?

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

    very good video, the only thing I would like clarified is if there is a reason to store the image in the db as blob as in the example.

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

    Thanks😊🎉

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

    Thanks for your great content :)

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

    Hi hussain. The explanation is clear. Can you make video on how does a consistency maintained in distributed system among the multiple microservies & I really can't find a good content on how to build our small own database to understand the working of relational database.

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

    I was asked in an Interview How durability is internally achieved in postgres (something like when data from WAL is persisted)

  • @prostyxi2771
    @prostyxi2771 8 місяців тому

    perfect more please

  • @coderkashif
    @coderkashif 7 місяців тому

    amazing

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

    phantom read and non-repeatable read looks the same to me, what am I missing?
    Okay so in case of non-repeatable we were updating the same row, and that was the cause of issue and in case of phantom read we created a new row which was the cause of the issue
    thank you for the amazing content. I have already bought your database course planning to watch that too.

  • @nero1375
    @nero1375 5 років тому +1

    awesome content! Keep it up!

    • @hnasr
      @hnasr  5 років тому

      Will do! Thanks for your comment 🙏

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

    Thank you so much for the video
    Can you please make a video on MongoDB architecture

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

    great video!

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

    Great stuff

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

    Same as others. Hooked

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

    wow 🔥🔥

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

    depending on what you mean by lost updates, you can get them even with the serializeable isolation level: the second transaction loses all updates done by concurrent ones. At least in h2 db, serializeable just guarantees that you won't observe rows added since your transaction started (so no more phantom reads). But you can still end up updating the database unaware of any changes made by other concurrent transactions. I don't know if there is any database that allows only one transaction at once which would be required to avoid this

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

      well ok, the documentation says that their interpretation of serializeable doesn't actually guarantee that sequential execution of concurrent transactions gives the same result

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

    now u are my tech lead 😂😂😂

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

    can you share the slides used in the video? It would be very useful as a reference. Thanks for the detailed explanation on ACID.

  • @ibrahemmohammad-rl5rq
    @ibrahemmohammad-rl5rq 3 місяці тому

    Talking about isolation i kind of run into a weird issue while using Repeatable read level and locks
    If you have two transactions running at the same time and you use lock for update (select for update) to get the record (let's say wallet) on t1 (first transaction) and you update the balance column value from 10 to 20 and then it's committed, now since you used lock for update that means t2 was waiting for the wallet record to be released and now it can continue after t1 committed
    On t2 if you get select the wallet record normally (without using lock for update) you'll get the balance 10 because both transactions were running at same time and it makes sense because we're using Repeatable read isolation level
    BUT if you get the wallet using lock for update on t2 it gives you the balance 20 😅
    Does the locks have more priority over isolation? Is this a normal behaviour ?
    Because I'm using this trick to have a general isolation level of Repeatable read but in some cases i want to get the committed record even if it was committed during the transaction not before it
    So it's like having two isolation levels , the general Repeatable read and the Read committed but only on records that's i chose using lock for update .
    Wanna get your opinion to know if this "trick" gonna cause me a headache in the future 😅
    BTW AWESOME CHANNEL ❤❤

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

    Please make video on postgres WAL

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

      👍👍 on my plan for the next video

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

    Hey man. Love your video but i am confused about dirty read example. You have mentioned that Transaction was Updated but not committed. How can the other session read different value other than what is in Database. Well unless it is committed it will read that updated value otherwise it will still read the value that is in database. Does it make sense?

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

      it means that the read transactions when in read uncommitted isolation level (sql server for example) are configured to read the latest row change wither this is committed or not. this could be in a different data structure usually called the WAL (write ahead log)
      what you described is a read committed isolation level where we read the value stored in the row and committed.

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

      @@hnasr thanks for quick reply. Thanks for explaining this to me. I always thought one can read updated value from database after committing, silly me. Always learn something new. Thanks again

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

    Thanks for the great video 🙌! Can you share your slides? I want to use it as a reference!

  • @pieicx
    @pieicx 4 роки тому +1

    my cat freaked out when you changed your tone lol

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

      Hằng 😂 sorry little kitty 😍

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

    - Transaction: A bunch of queries
    - Atomicity: Either all the queries in a transaction must commit, or all of them must rollback
    - Isolation: is about isolating transactions to handle concurrency issues arising from concurrent transactions. How: versions and locks(shared/read) in db level, locks in application level.
    Problems = Dirty read, Non Repeatable read, Phantom read, Lost update.
    Solutions = Isolation levels like Read uncommitted, Read committed, Repeatable read, Serializable
    - Consistency: Is about Consistent data and Consistent read.
    Consistent data: Happens within a machine due to non-atomicity, non-isolation etc
    Consistent read: happens across machines, in both sql and nosql dbs when replicas are present. You update a record, but when you read after, you get old data. It is always eventual consistency when replocas are present
    - Durability: committed transactions must be persisted in a durable storage

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

    Very educational and funny

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

    Awesome

  • @SaifUlIslam-di5xv
    @SaifUlIslam-di5xv 3 роки тому +1

    Reached the end. (Y)

  • @aymaneharmaz7126
    @aymaneharmaz7126 11 місяців тому

    I have a question, do the changes made by a transaction before being commited or rolled back performaed directly on the database (on disk) or each transaction performs the changes on its own isolated memory ?

  • @reloadfast
    @reloadfast 4 роки тому +5

    You have a Khan Academy vibe going on here...

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

    Hey Hussein, Thanks for the great content.
    Can you make a video to give some idea about how Db Client and Server communicate like mySQL uses its own protocol mysql. and how they use TCP connection like do they create new TCP connection for each query similar to HTTP 1.0 or they use single TCP connection for entire Txn similar to HTTP 1.1 ?

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

      Ashutosh Mishra hey Ashutosh, I think I did this with mongodb and postgres
      Wiresharking MongoDB - Decrypting TLS traffic, mongo protocol, cursors and more
      ua-cam.com/video/naJC-yuCZb8/v-deo.html
      Wiresharking PostgreSQL - SELECT * FROM on Postgres behind the scenes
      ua-cam.com/video/vjWt-PF_6tA/v-deo.html

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

      @@hnasr Thanks.!
      You can add those videos to database engineering playlist so that other people will find it in the same playlist.

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

    This one is good 👍

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

      Mert Ertuğrul 😍😍😄 let me know what should I make next .. cheers

  • @AISynthetic
    @AISynthetic 4 роки тому +2

    Can you make series on System Design?

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

      Great idea! Will sure consider it

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

      Thank you

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

    ياريت لو تضيف ترجمة للفديوهات علشان الضعاف في الانجليزي يستفادوا برضه

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

    A W E S O M E !

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

    If i want to learn Database , Can i start with this playlist ?
    Thank you Hussain ❤️

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

      Yes, absolutely!