From 4ff5d1211ae341b488815e4dbaa6113442dbd6f7 Mon Sep 17 00:00:00 2001 From: Gabor Szabo Date: Fri, 16 Aug 2024 11:38:04 +0300 Subject: [PATCH] bank --- sqlite/examples/bank/out.out | 20 ++++++++++++++++ sqlite/examples/bank/setup_bank.sql | 10 ++++++++ sqlite/examples/bank/show.sql | 3 +++ sqlite/examples/bank/steps.sh | 13 ++++++++++ sqlite/examples/bank/transfer.sql | 3 +++ sqlite/examples/bank/with_transaction.sql | 5 ++++ sqlite/examples/bank/without_transaction.sql | 4 ++++ sqlite/intro.md | 25 ++++++++++++++++---- 8 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 sqlite/examples/bank/out.out create mode 100644 sqlite/examples/bank/setup_bank.sql create mode 100644 sqlite/examples/bank/show.sql create mode 100755 sqlite/examples/bank/steps.sh create mode 100644 sqlite/examples/bank/transfer.sql create mode 100644 sqlite/examples/bank/with_transaction.sql create mode 100644 sqlite/examples/bank/without_transaction.sql diff --git a/sqlite/examples/bank/out.out b/sqlite/examples/bank/out.out new file mode 100644 index 00000000..e8b87096 --- /dev/null +++ b/sqlite/examples/bank/out.out @@ -0,0 +1,20 @@ +Jane|0 +Mary|1000 +Ann|1000 +Total|2000 +----- +Jane|100 +Mary|900 +Ann|1000 +Total|2000 +----- +Jane|100 +Mary|800 +Ann|1000 +Total|1900 +----- +Jane|100 +Mary|800 +Ann|1000 +Total|1900 +----- diff --git a/sqlite/examples/bank/setup_bank.sql b/sqlite/examples/bank/setup_bank.sql new file mode 100644 index 00000000..9c17b810 --- /dev/null +++ b/sqlite/examples/bank/setup_bank.sql @@ -0,0 +1,10 @@ +CREATE TABLE bank ( + name TEXT PRIMARY KEY, + balance INTEGER NOT NULL +); + +INSERT INTO bank (name, balance) VALUES ("Jane", 0); +INSERT INTO bank (name, balance) VALUES ("Mary", 1000); +INSERT INTO bank (name, balance) VALUES ("Ann", 1000); + + diff --git a/sqlite/examples/bank/show.sql b/sqlite/examples/bank/show.sql new file mode 100644 index 00000000..d75d01af --- /dev/null +++ b/sqlite/examples/bank/show.sql @@ -0,0 +1,3 @@ +SELECT * FROM bank; +SELECT "Total", SUM(balance) FROM bank; +SELECT "-----"; diff --git a/sqlite/examples/bank/steps.sh b/sqlite/examples/bank/steps.sh new file mode 100755 index 00000000..0194d455 --- /dev/null +++ b/sqlite/examples/bank/steps.sh @@ -0,0 +1,13 @@ +sqlite3 bank.db < setup_bank.sql +sqlite3 bank.db < show.sql + +sqlite3 bank.db < transfer.sql +sqlite3 bank.db < show.sql + +sqlite3 bank.db < without_transaction.sql +sqlite3 bank.db < show.sql + +sqlite3 bank.db < with_transaction.sql +sqlite3 bank.db < show.sql + +rm -f bank.db diff --git a/sqlite/examples/bank/transfer.sql b/sqlite/examples/bank/transfer.sql new file mode 100644 index 00000000..2adebd17 --- /dev/null +++ b/sqlite/examples/bank/transfer.sql @@ -0,0 +1,3 @@ +UPDATE bank SET balance = (SELECT balance FROM bank WHERE name = "Mary") - 100 WHERE name = "Mary"; +UPDATE bank SET balance = (SELECT balance FROM bank WHERE name = "Jane") + 100 WHERE name = "Jane"; + diff --git a/sqlite/examples/bank/with_transaction.sql b/sqlite/examples/bank/with_transaction.sql new file mode 100644 index 00000000..d845800a --- /dev/null +++ b/sqlite/examples/bank/with_transaction.sql @@ -0,0 +1,5 @@ +BEGIN TRANSACTION; +UPDATE bank SET balance = (SELECT balance FROM bank WHERE name = "Mary") - 100 WHERE name = "Mary"; +.exit +UPDATE bank SET balance = (SELECT balance FROM bank WHERE name = "Jane") + 100 WHERE name = "Jane"; +COMMIT; diff --git a/sqlite/examples/bank/without_transaction.sql b/sqlite/examples/bank/without_transaction.sql new file mode 100644 index 00000000..1dc72ea8 --- /dev/null +++ b/sqlite/examples/bank/without_transaction.sql @@ -0,0 +1,4 @@ +UPDATE bank SET balance = (SELECT balance FROM bank WHERE name = "Mary") - 100 WHERE name = "Mary"; +.exit +UPDATE bank SET balance = (SELECT balance FROM bank WHERE name = "Jane") + 100 WHERE name = "Jane"; + diff --git a/sqlite/intro.md b/sqlite/intro.md index 23edc9a5..72a0844a 100644 --- a/sqlite/intro.md +++ b/sqlite/intro.md @@ -163,10 +163,6 @@ Meaning of life?|42 ![](examples/foreign-key.sql) -## Transactions -{id: transactions} - -![](examples/transaction.sql) ## PRAGMA {id: pragma} @@ -179,10 +175,29 @@ Meaning of life?|42 ![](examples/update.sql) +## SQLite Transaction - in a bank +{id: sqlite-transactions-in-a-bank} + +* Setup Bank accounts with some initial money. +* Move some money from one account to another - two separate steps. Worked. +* Move some money from one account to another - two separate steps - stop in the middle. Failed. +* Move some money from one account to another - Transaction - stop in the middle. Worked. (money stayed where it was) +* Remove bank + +![](examples/bank/setup_bank.sql) +![](examples/bank/show.sql) +![](examples/bank/transfer.sql) +![](examples/bank/without_transaction.sql) +![](examples/bank/with_transaction.sql) + +![](examples/bank/steps.sh) + +![](examples/bank/out.out) + * TODO: loading a large CSV file into the database and running queries. -* TODO: creating a multi-tabe databas, dumping it and then loading it and running queries against it. +* TODO: creating a multi-tabe database, dumping it and then loading it and running queries against it. * TODO: FOREIGN KEY - cascading deletition?