: 일련의 작업들에 대한 연속처리단위(정보 교환, 데이터베이스 갱신 등)- 작업의 기본단위
데이터베이스의 상태를 변화시키는 작업의 모음->INSERT, DELETE, UPDATE(DML) 등 사용
ACID
: 데이터베이스 내에서 일어나는 트랜잭션의 안정성을 보장하기 위해 필요한 성질
Atomicity(원자성)
: 트랜잭션을 구성하는 작업들은 전부 성공하거나 전부 실패---부분적으로 실행XXXConsistency(일관성)
: 하나의 트랜잭션 이전과 이후 데이터베이스 상태는 이전과 같이 유효해야 한다는 뜻
- 데이터베이스의 제약이나 규칙에 의거한 데이터베이스이어야 함을 의미
- user 테이블에는 id 와 value가 있어야 하는 데이터베이스 제약 O
-> id가 없는 새로운 고객을 추가하는 쿼리, 기존 유저의 value만 삭제하는 쿼리
=>일관성을 위반하는것Isolation(고립성)
: 하나의 트랜잭션이 다른 트랜잭션과 독립되어야 한다는 뜻
- 동시에 여러 개의 트랜잭션들이 수행될 때에 각 트랜젝션은 고립되어 있어 연속으로 실행된 것과 동일한 결과를 나타내야 함
Durability(지속성)
: 트랜잭션이 성공적으로 수행되었다면 해당 트랜잭션에 대한 로그가 남고 런타임 오류나 시스템 오류가 발생해도 해당 기록은 영구적이어야 한다는 뜻
트랜잭션은 확정 신호를 알려져야 데이터베이스에 반영됨
예) "A 가 B 에게 100 만원을 입금해야한다" --확정신호--> 데이터베이스 반영
Auto-commit by Default
때문에 가능Auto-commit by Default
을 끈다면 마지막에 commit;
을 해줘야 함-commit과 반대 개념: 트랜잭션 수행 중에 지금까지 수행한 내용을 모두 취소하겠다라는 의미
SELECT CASE
WHEN CustomerId <= 25 THEN 'GROUP 1'
WHEN CustomerId <= 50 THEN 'GROUP 2'
ELSE 'GROUP 3'
END
FROM customers
SELECT *
FROM tips
WHERE size >= 5 OR total_bill > 45;
tips[(tips["size"] >= 5) | (tips["total_bill"] > 45)]
SELECT tip/total_bill AS tip_rate
FROM tips;
SELECT *
FROM frame
WHERE col2 IS NULL;
frame[frame["col1"].notna()]
SELECT *
FROM frame
WHERE col1 IS NOT NULL;
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)
);
SELECT AlbumId
FROM artists a
JOIN albums a2 ON a.ArtistId =a2.ArtistId
WHERE a.Name LIKE '%the%'; #the로 시작하는 문자열
LIKE"a%b
: a로 시작해서 b로 끝나는 문자열
참고
SELECT InvoiceId
FROM invoices i
WHERE CustomerId IN (29,30,63)
AND Total BETWEEN 1.00 AND 3.00;
SELECT CustomerId,UPPER(City ||' '|| Country) AS City_Country
FROM customers c
||를 이용해서 문자열끼리 합칠 수 있음
위 쿼리문으로 예시 든다면 값이 'KOREA SEOUL' 로 나올 것이다
참고
upper
SELECT EmployeeId
FROM employees e
WHERE HireDate < "2013-01-01"
ORDER BY LastName
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