DAY38[N313]

트랜잭션

: 일련의 작업들에 대한 연속처리단위(정보 교환, 데이터베이스 갱신 등)- 작업의 기본단위
데이터베이스의 상태를 변화시키는 작업의 모음->INSERT, DELETE, UPDATE(DML) 등 사용

  • 여러 개의 작업들을 하나의 실행 유닛으로 묶어준 것
    -> 이중에 하나라도 실패하면 b에게 100만원을 입금하지 못한다

ACID

: 데이터베이스 내에서 일어나는 트랜잭션의 안정성을 보장하기 위해 필요한 성질

  • Atomicity(원자성)
    : 트랜잭션을 구성하는 작업들은 전부 성공하거나 전부 실패---부분적으로 실행XXX

  • Consistency(일관성)
    : 하나의 트랜잭션 이전과 이후 데이터베이스 상태는 이전과 같이 유효해야 한다는 뜻

    • 데이터베이스의 제약이나 규칙에 의거한 데이터베이스이어야 함을 의미
    • user 테이블에는 id 와 value가 있어야 하는 데이터베이스 제약 O
      -> id가 없는 새로운 고객을 추가하는 쿼리, 기존 유저의 value만 삭제하는 쿼리
      =>일관성을 위반하는것
  • Isolation(고립성)
    : 하나의 트랜잭션이 다른 트랜잭션과 독립되어야 한다는 뜻

    • 동시에 여러 개의 트랜잭션들이 수행될 때에 각 트랜젝션은 고립되어 있어 연속으로 실행된 것과 동일한 결과를 나타내야 함
  • Durability(지속성)
    : 트랜잭션이 성공적으로 수행되었다면 해당 트랜잭션에 대한 로그가 남고 런타임 오류나 시스템 오류가 발생해도 해당 기록은 영구적이어야 한다는 뜻

COMMIT 과 Rollback

commit

트랜잭션은 확정 신호를 알려져야 데이터베이스에 반영됨
예) "A 가 B 에게 100 만원을 입금해야한다" --확정신호--> 데이터베이스 반영

  • 확정신호 = commit
  • commit 없이도 INSERT, UPDATE, DELETE 가 될 수 있었던 것은 Auto-commit by Default 때문에 가능
    • Auto-commit by Default 을 끈다면 마지막에 commit; 을 해줘야 함

Rollback

-commit과 반대 개념: 트랜잭션 수행 중에 지금까지 수행한 내용을 모두 취소하겠다라는 의미

SQL More

  • GROUP BY, HAVING, COUNT(), SUM(), AVG(), MAX(), MIN()
  • 정해진 순서 有: FROM > WHERE >GROUP BY> HAVING> SELECTORDER BY
  • CASE = if문의 기능을 사용함
SELECT CASE
			WHEN CustomerId <= 25 THEN 'GROUP 1'
			WHEN CustomerId <= 50 THEN 'GROUP 2'
			ELSE 'GROUP 3'
		END
	FROM customers
  • SUBQUERY(많은 연습 필요): 실행되는 쿼리에 중첩으로 위치해 정보를 전달
    • select, from, where 등등 다양한 곳에서 사용가능
    • 예시
  • LIMIT OFFSET (=iloc[ ] )
    LIMIT "A" OFFSET "B":B에서 시작하여 A 만큼의 row를 추출
  • WHERE(SQL vs Pandas)
SELECT *
FROM tips
WHERE size >= 5 OR total_bill > 45;
tips[(tips["size"] >= 5) | (tips["total_bill"] > 45)]
  • DIVISION
SELECT tip/total_bill AS tip_rate
FROM tips;
  • Null
SELECT *
FROM frame
WHERE col2 IS NULL;
  • Not Null 확인(SQL vs Pandas)
frame[frame["col1"].notna()]
SELECT *
FROM frame
WHERE col1 IS NOT NULL;
  • UNION: 두개의 SELECT 결과를 합칠수 있으며, 중복되는 행은 하나만 표시함
  • UNION ALL: 중복을 제거하지 않음

N312~313

SQLite Create Table

CREATE TABLE Customer_Package (
    cp_id INTEGER NOT NULL PRIMARY KEY,
    customer_id INTEGER, 
    package_id INTEGER,
    FOREIGN KEY(customer_id) REFERENCES Customer(customer_id)
    FOREIGN KEY(package_id) REFERENCES Package(package_id)
);

create 참고
pk, fk참고

Like절을 사용한 조건부 표현식

SELECT AlbumId
FROM artists a 
JOIN albums a2 ON a.ArtistId =a2.ArtistId 
WHERE a.Name LIKE '%the%'; #the로 시작하는 문자열

LIKE"a%b: a로 시작해서 b로 끝나는 문자열
참고

BETWEEN절을 사용한 지정되 값 범위와 비교

SELECT InvoiceId
FROM  invoices i
WHERE CustomerId IN (29,30,63)  
  AND Total BETWEEN 1.00 AND 3.00; 

참고

SQLite 문자열 합치기 &upper

SELECT CustomerId,UPPER(City ||' '|| Country) AS City_Country
FROM customers c 

||를 이용해서 문자열끼리 합칠 수 있음
위 쿼리문으로 예시 든다면 값이 'KOREA SEOUL' 로 나올 것이다
참고
upper

SQLite DateTime 비교

SELECT EmployeeId
FROM employees e 
WHERE HireDate  < "2013-01-01"
ORDER BY LastName 

참고

ORDER BY 여러개 사용

SELECT c.FirstName || c.LastName|| i.InvoiceId  
FROM customers c
JOIN invoices i ON c.CustomerId =i.CustomerId 
ORDER BY c.FirstName, c.LastName, i.InvoiceId 

일부 문자열 추출

SELECT LOWER(SUBSTR(FirstName,1,4) || SUBSTR(LastName,1,2)) AS New_customer
FROM customers c

substr외 다양한 내장 함수

좋은 웹페이지 즐겨찾기