quartz/content/notes/18-advanced-sql-1.md
Jet Hughes 8a667e5693 update
2022-05-27 14:12:53 +12:00

142 lines
4.0 KiB
Markdown

---
title: "18-advanced-SQL"
aliases:
tags:
- info201
- lecture
sr-due: 2022-05-15
sr-interval: 3
sr-ease: 250
---
![create table 2](https://i.imgur.com/sVoiVud.png)
![create table 2](https://i.imgur.com/AyzF1kR.png)
varchar usually bigger than you think
# CRUD
- insert adds a row ![](https://i.imgur.com/WLF64jn.png)
- select retrieves rows from the table![](https://i.imgur.com/yHhPL6L.png)
- ouput can be "saved" as a view![](https://i.imgur.com/iHtC4Vd.png) ![](https://i.imgur.com/NPqTeA1.png)
- changes to the underlying table also chagnes the view
- update modifies rows ![](https://i.imgur.com/aw74vlk.png)
- delete removes rows ![](https://i.imgur.com/DZyorFF.png) ![](https://i.imgur.com/IOKErzP.png)
- test as a select statement first
# SQL DAO programming
We want to miniminse load on sql as connecting to database is expensive.
Optimisations:
- prefer muultiple row operations
- connection pools (keep connections "alive")
- reuse prepared statements (reduce unnecessary SQL parsing)
- consider combining queries to reduce round trips
- batched requests
Follow Optimistic approach
- assume operatios will succeed (no pre checking)
- handle errors with exception handling
- consider using merge if available
## Merge
![](https://i.imgur.com/UUZWjyM.png) aka replace etc.
- update if they exist other wise insert
## JDBC
Java framework for interacting with sql databases.
plaform and DBMS independent
- driver provided by DBMS vendors
- same Java code will work with any DBMC
key concepts
- connections and connection pools
- sql strings and prepared statements
- result sets
- transactions
- batched requrests
![typical jdbc](https://i.imgur.com/jLGbZWW.png)
## JDBI
- bette version of JDBI
- layered on top of [JDBC](#JDBC)
- better APIs
- less code
- simple class <-> table mapping
- flexible plugin architecture
![typical jdbi (fluent)](https://i.imgur.com/SwmulpV.png)
![typical jdbi (declarative)](https://i.imgur.com/1uc2t47.png)
# Transactions
interaction between two entities
- follow explicit or implied forms
- usually involves exchange on resources
- may require several steps
- often considered a single unit
## In data bases
- group of db operations is considered a *single logical unit*
- transfer (read and update)
- recieve shipement (update accounts)
- customer sale
transactions are all or nothing. (commit vs rollback)
## ACID
- Atomic
- all or nothing
- operations should be related
- Consistent
- transactions move dbs from one consistent state to another
- "consistent" ⇒ all integrity rules are satisfied
- db may be inconsistent during a transaction
- require defferable constraints
![atomc and consistent](https://i.imgur.com/tCqEEHy.png)
- Isolated
- concurrent transactios shouldn't interfere with each other
- ideally behave as if other transactions dont exist
- read committed isolation
- uncommited changes are visible to other transactions
- require some form of concrrency mangement (e.g., locking)
- ![improper isolation](https://i.imgur.com/IrZZDlW.png)
- Durability
- once a transaction is commited it is permanent
- uncommited transaction dont survive crashes
- auto rollback of uncommitted transaction
## commit and rollback
- changes are made to "live" data
- commit makes database changes permanent
- rollback removes all changes since that transaction start
## Transaction in Java
default to auto commit.
- each statement is a separate transaction
- if transaction has multiple statements
- disable auto commit
- you must manage commit and rollback yourself
![JDBC explicit transactions](https://i.imgur.com/FJaINwD.png)
![JDBI explcit transaction (fluent)](https://i.imgur.com/KvtfZC0.png)
![JDBI explcit transaction (declarative)](https://i.imgur.com/BzGRpV4.png)
# Select
- select <- wahat
- from <- from where
- where <- filter
- group <- aggregation
- order <- order
distinct removes duplicate rows
![distinct](https://i.imgur.com/RiOHBkM.png)
![select](https://i.imgur.com/DWFUQYN.png)
![from](https://i.imgur.com/it107cD.png)