Lab 14: Transactions
Overview
Step 1: ACID Properties
Property
Meaning
Example
Step 2: Setup
docker run -d --name mysql-lab -e MYSQL_ROOT_PASSWORD=rootpass mysql:8.0
for i in $(seq 1 30); do docker exec mysql-lab mysql -uroot -prootpass -e "SELECT 1" 2>/dev/null && break || sleep 2; done
docker exec mysql-lab mysql -uroot -prootpass << 'EOF'
CREATE DATABASE bankdb;
USE bankdb;
CREATE TABLE accounts (
account_id INT NOT NULL AUTO_INCREMENT,
owner VARCHAR(100) NOT NULL,
balance DECIMAL(12,2) NOT NULL DEFAULT 0.00,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (account_id),
CONSTRAINT chk_balance CHECK (balance >= 0)
);
CREATE TABLE transfers (
transfer_id INT NOT NULL AUTO_INCREMENT,
from_account INT NOT NULL,
to_account INT NOT NULL,
amount DECIMAL(12,2) NOT NULL,
transferred_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(20) DEFAULT 'completed',
PRIMARY KEY (transfer_id)
);
INSERT INTO accounts (owner, balance) VALUES
('Alice', 5000.00),
('Bob', 3000.00),
('Carol', 1000.00),
('David', 50.00); -- low balance
EOFStep 3: Autocommit Mode
Step 4: Basic COMMIT
Step 5: ROLLBACK
Step 6: SAVEPOINT
Step 7: Atomic Fund Transfer (Full Example)
Step 8: Capstone — Verify Atomicity
Summary
Command
Description
Isolation Level
Dirty Read
Non-repeatable Read
Phantom Read
Last updated
