데이터베이스 9

트랜젝션이란?

트랜젝션은 무엇인가요? 트랜젝션은 데이터베이스에서 수행하는 작업의 최소 단위로 데이터베이스의 ‘무결성’을 유지합니다. 트랜젝션은 하나 의상의 쿼리를 포함하고 ACID라는 원자성, 일관성, 고립성, 지속성의 4가지 규칙을 만족해야합니다. *무결성이란? 데이터의 일관성과 정확성을 지키는 것 원자성 Atomicity : 트랜젝션은 all or nothing, 전부 수행되거나 아니면 전부 수행되지 않거나 둘 중 하나여야 합니다. 즉, 원자성은 더 이상 쪼개질 수 없는 최소의 작업 단위를 의미합니다. 일관성 Consistency : 트랜젝션이 성공하면 언제나 일관성 있는 데이터베이스 상태를 유지해야함을 의미합니다. ex. 두 잔액의 합이 변하는 경우, 숫자필드가 문자필드로 변하는 경우 일관성이 없다고 할 수 있다..

물리삭제와 논리삭제를 코드로 구현해 보았다.

삭제에는 두 가지 방법이 있다. 물리삭제는 실제 데이터베이스에서 제거하는 것이고, 논리삭제는 같은 테이블에 '삭제플레그'의 값을 변경하여 실제 삭제된 것과 동일하게 처리하는 방식이다.(이 외에도 논리삭제의 방법은 다양하다) 코드로 구현해 본다면? 깃헙 링크 (깃헙 링크에 들어가면 코드를 모두 볼 수 있다.) @app.route("/snack/", methods=["DELETE", "PUT"]) def delete(id): if request.method == "DELETE": SnackDelete.delete_physics(id) elif request.method == "PUT": SnackDelete.delete_logical(id) result_value = SnackDelete.select_all..

생활코딩 #테이블 분리하기, JOIN

오늘 배운 것 테이블 분리하기 앞선 글에 적은 것처럼 테이블 분리는 데이터를 좀 더 효율적으로 관리하기 위함. 아래는 실습 코드 MariaDB [(none)]> use daco; Database changed MariaDB [daco]> SHOW TABLES; +----------------+ | Tables_in_daco | +----------------+ | topic | +----------------+ 1 row in set (0.008 sec) MariaDB [daco]> RENAME TABLE topic TO topic_backup; Query OK, 0 rows affected (0.041 sec) # 테이블 이름 변경 방법 -> 리네임 테이블 (이름) 투 (새이름); MariaDB [da..

생활코딩 #관계형 데이터베이스의 중요성

오늘 배운 것 기술을 배우면 본질과 혁신이 무엇인지 나눠서 파악해보자 본질 : 데이터베이스 = CRUD = 본질은 공통점이다 혁신 : 관계형 = 다른 혁신들과 차이점은? 관계형 데이터베이스의 필요성 데이터가 중복된다면 무언가 개선할 것 이 있다는 증거다 1억개의 데이터 중에 1천만개가 중복된다면? -> 용량이 큰 데이터가 중복된다면 경제적 손해 -> 수정이 필요하다면 많은 리소스가 필요 -> 데이터 추출이 명확하지 않을 수 있음 (ex. 동명이인) 등등 오늘 느낀 것 본질 CRUD를 잊지 말 것. 이제 본격적으로 기술을 배우기 시작한다. 테이블 분리, 조인, 이것들은 결국 데이터를 효율적이고 혁신적으로 관리하기 위함일 터, 이것은 저비용 고효율을 의미하겠지. 머리를 어떻게 굴리냐에 따라 데이터관리는 천지..

생활코딩 #SQL의 UPDATE 구문(UPDATE)

오늘 배운 것 SQL의 UPDATE 구문 우선 UPDATE 문법부터 보고 가자. 싱글 테이블과 멀티 테이블 2가지로 나뉘는 것으로 보인다. 공식문서 링크 #Single-table syntax: UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET assignment_list [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] value: {expr | DEFAULT} assignment: col_name = value assignment_list: assignment [, assignment] ... #Multiple-table syntax: UPDATE [LOW_PRIORITY] [IGNORE] table_refer..

생활코딩 #SQL의 SELECT 구문(READ)

오늘 배운 것 SQL의 SELECT 구문 -> READ ! # 13.2.10 SELECT Statement (SELECT SYNTAX) # [] 대괄호는 생략 가능하다 SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr] ... [into_option] [FROM table_references [PARTITION partition_list]] [WHERE where_condition] [GROUP BY {col_name..

생활코딩 #SQL의 INSERT 구문(CREATE)

오늘 배운 것 SQL의 INSERT 구문 -> CREATE # 테이블 안에 데이터 넣기 >>> INSERT INTO 테이블이름 (컬럼제목,컬럼제목,컬럼제목) VALUES(넣을값,넣을값,넣을값); # 데이터 확인하기 >>> SELECT * FROM 테이블이름 # 테이블 안에 데이터 넣기 [ INSERT INTO 테이블이름 (컬럼제목,컬럼제목,컬럼제목) VALUES(넣을값,넣을값,넣을값); ] ! MariaDB [(none)]> use daco Database changed MariaDB [daco]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | daco | | information_schema | | mysql |..

생활코딩 #MySQL 테이블의 생성, CRUD

오늘 배운 것 MySQL 테이블의 생성 테이블을 생성할 때 열의 데이터타입을 강제할 수 있다! (잘못된 정보가 컬럼에 기재되지 못하도록) ex. int, bigint NOT NULL : 값이 없는 것을 허용하지 않겠다라는 의미 NULL : 값이 없어도 혀용한다는 의미 AUTO_INCREAMENT : 행이 추가될 때마다 자동으로 1을 추가하라는 의미 VARCHAR : 베리어블과 캐릭터를 합친 약자 > PRIMARY KEY : 성능 / 중복 두가지 측면에서 쓰이는 식별자, 기본 키로 사용한다는 의미 MariaDB [(none)]> MariaDB [(none)]> use daco Database changed MariaDB [daco]> create table topic( -> id int(11) not nu..

생활코딩 #MySQL의 구조

오늘 배운 것 MySQL의 구조 관계형 데이터베이스는 스프레드 시트와 유사하게 표(table) 형태로 데이터를 저장한다 [표]가 모여 [스키마], [스키마]가 모여 [데이터베이스 서버]가 된다 [스키마]는 다른 말로 [데이터베이스] 라고도 한다 MySQL 서버 접속 데이터베이스의 장점 >>> 보안 >>> 차등적 권한 기능 -uroot : 관리자, 모든 권한을 가짐, 루트 권한으로 데이터를 다루는 것은 좋지 않다 -p 엔터 : 비밀번호 입력창 호출 MySQL 스키마(schema)의 사용 C:\Users\Daco>cd C:\Bitnami\wampstack-8.0.9-0\mariadb\bin C:\Bitnami\wampstack-8.0.9-0\mariadb\bin>mysql -uroot -p Enter pas..