제 4절. TCL (Transaction Control Language)

1. 트랜잭션 개요

트랜잭션이란?

데이터베이스의 논리적 연산단위이다.
분할할 수 없는 최소 단위의 데이터베이스 조작이다.
최소 단위 이므로 ALL or NOTHING 의 개념이다.

트랜잭션 명령

  • COMMIT : 연산이 올바르게 반영된 데이터를 데이터베이스에 반영시킨다.
  • ROLLBACK : 트랜잭션 이전의 상태로 되돌린다.

트랜잭션의 특성

  • 원자성 : 트랜잭션의 연산이 모두 실행되거나 아니면 전혀 실행되지 않은 상태로 남아야한다. ALL or NOTHING
  • 일관성 : 데이터베이스 내용이 정상적이라면 트랜잭션이 실행된 이후에도 데이터베이스의 내용은 정상이어야 한다.
  • 고립성 : 트랜잭션이 실행되는 도중 다른 트랜잭션의 영향을 받지 않는다.
  • 지속성 : 트랜잭션이 성공적으로 수행되면, 그 결과는 데이터베이스에 영구적으로 저장된다.

트랜잭션의 특성을 충족시키기 위해 데이터베이스는 다양한 레벨의 잠금기능(LOCKING)을 제공한다.
잠금이 걸린 데이터는 잠금을 수행한 트랜잭션만이 해제할 수 있다.

2. COMMIT

트랜잭션을 완료하는 명령어.

  • COMMIT 이전
    DML로 데이터를 변경하는 것은 단지 메모리 버퍼에만 영향을 준것이므로 데이터 변경 이전의 상태로 복구할 수 있다.
    변경한 행은 잠금(LOCKING)되어서 다른 사용자가 변경할 수 없다.

  • COMMIT 이후
    데이터에 대한 변경 사항이 데이터베이스에 반영된다.
    이전 데이터는 영원히 잃어버리게 된다.
    모든 사용자가 결과를 볼 수 있다.

cf) ORACLE의 경우 DML 실행 시 COMMIT을 수행해줘야 DB에 반영된다.
반면, SQL SERVER는 기본적으로 모두 AUTO COMMIT이다.

데이터베이스를 정상적으로 접속 종료하면, 자동으로 트랜잭션이 커밋된다.

3. ROLLBACK

COMMIT 이전에 DML로 변경한 사항을 취소한다.
롤백을 하면 변경 사항이 취소되면서 조작한 행에 대한 잠금이 풀리고 다른 사용자들이 데이터를 변경할 수 있게 된다.

cf) SQL SERVER는 기본으로 AUTO COMMIT되므로, 롤백을 하려면 명시적으로 트랜잭션을 선언해야 한다.

COMMIT과 ROLLBACK의 효과

  • 데이터 무결성 보장
  • 논리적으로 연관된 작업을 그룹핑하여 처리 가능

4. SAVEPOINT

저장점을 정의하면 현 시점을 기준으로 특정시점(SAVEPOINT)까지 트랜잭션의 일부만 롤백할 수 있다.

SAVEPOINT SVP1;

ROLLBACK TO SVP1;

SQL SERVER의 경우, SAVE TRANSACTION 을 사용하여 동일한 기능을 수행한다.

SAVE TRANSACTION SVTR1;

ROLLBACK TRANSACTION SVTR1;

INSERT작업, SAVEPOINT1, UPDATE작업, SAVEPOINT2, DELETE, 현 시점 순으로 작업했을때,
SAVEPOINT1로 돌아간 후에, SAVEPOINT2로 (미래 방향으로) 돌릴 수는 없다.

왜냐하면 SAVEPOINT1으로 실행한 시점에는 SAVEPOINT2 저장점이 존재하지 않기 때문이다.

728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 5 : 함수  (0) 2020.05.27
SQL 기본 4 : WHERE 절  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27
SQL 기본 1 : RDB 개요, DDL  (0) 2020.05.27
Toad TNS file 검증 에러  (0) 2020.02.21

제 3절 DML (Data Manipulation Language)

테이블의 자료들을 입력, 수정, 삭제, 조회 하는 DML 사용 방법을 정리한다.

 

1. INSERT

두 가지 방법이 있다. 한 번에 한 건만 입력 된다.

INSERT INTO 테이블명 (COLUMN1, COLUMN2, COLUMN3) VALUES (DATA1, DATA2, DATA3);
INSERT INTO 테이블명 VALUES (DATA1, DATA2, DATA3);

첫 번째 유형은 작성한 칼럼 순서에 맞게 뒤에 값들 순서도 맞춰준다. (테이블 칼럼 순서에 맞출 필요 없다)
두 번째 유형은 테이블 칼럼 순서에 맞게 써야 하며 빠짐 없이 모든 칼럼에 대해 값을 넣어야 한다.

 

2. UPDATE

UPDATE 테이블명 
SET 칼럼명 = 새로운값;

UPDATE PLAYER
SET BACK_NO = 99
WHERE ID = 'MF2';

조건절 WHERE를 명시하지 않으면 모든 행에 대해 수정된다.

 

3. DELETE

조건절 WHERE를 명시하지 않으면 모든 행이 삭제된다.

DELETE [FROM] 테이블명 
WHERE 조건절;

DDL의 경우 명령어 입력과 동시에 AUTO COMMIT 되어어 테이블에 영향을 미친다.
DML의 경우, 테이블을 메모리 버퍼에 올려두고 작업한다. 그래서 DML 명령 후에 COMMIT 명령어 실행으로 TRANSACTION을 종료해야 테이블에 반영된다.

데이터를 삭제할 때 DELETE 명령은 삭제된 데이터를 로그로 저장한다.
이에 반해 TRUNCATE TABLE의 경우 로그 저장을 안하므로 ROLLBACK이 불가능하다.

 

4. SELECT

SELECT ALL/DISTINCT 칼럼명, 칼럼명, 칼럼명 ... 
FROM 테이블명;

ALL: 디폴트 옵션. 중복된 데이터도 모두 출력한다.
DISTINCT : 중복된 데이터는 1건으로 처리해서 출력한다.

SELECT PLAYER_ID, PLAYER_NAME, POSITION, HEIGHT
FROM PLAYER;

 

WILDCARD 사용하기

아스트리크(*) 를 사용하여 해당 테이블의 모든 칼럼을 조회할 수 있다.
SELECT * FROM 테이블명;

ALIAS 부여하기 (별명 붙이기)

칼럼명 바로 뒤에 적는다.
칼럼명 바로 뒤에 AS 키워드를 사용하여 별명을 붙여도 된다.
띄어쓰기를 포함한 경우에는 별명을 ""로 감싸준다.

SELECT PLAYER_NAME AS 선수명, HEIGHT AS 키
FROM PLYAER;

 

5. 산술 연산자와 합성 연산자

산술 연산자

NUMBER 와 DATE 자료형에 적용된다.
사칙연산이 가능하다.
괄호를 이용하여 우선순위 적용이 가능하다.

SELECT PLAYER_NAME 이름, ROUND(WEIHGT/(HEIGHT/100), 2) "BMI 비만지수"
FROM PLAYER;

합성 연산자 (CONCATENATION)

문자와 문자를 연결한다.

  • ORACLE 의 경우 || , SQL SERVER 의 경우 + 표시로 연결한다.
  • CONCAT(STRING1 , STRING2) 함수를 사용할 수 있다.
  • 문자 표현식의 결과로 새로운 칼럼을 생성한다.

아래 예시는 3개의 컬럼의 데이터들을 이어붙여서 '체격정보'라는 새로운 칼럼을 생성한다.

SELECT PLAYER_NAME ||'선수' || HEIGHT || 'cm' || WHEIGHT || 'kg' 체격정보
FROM PLAYER;
728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 4 : WHERE 절  (0) 2020.05.27
SQL 기본 3 : TCL  (0) 2020.05.27
SQL 기본 1 : RDB 개요, DDL  (0) 2020.05.27
Toad TNS file 검증 에러  (0) 2020.02.21
실습 환경 만들기 - Toad 설치  (0) 2020.02.21

제 1절 관계형 데이터베이스 개요

1. 데이터베이스

관계형 데이터베이스

정규화를 통한 합리적인 테이블 모델링을 통해 이상(anomaly)현상을 제거하고 데이터 중복을 피할 수 있으며, 동시성 관리, 병행 제어를 통해 많은 사용자들이 동시에 데이터를 공유 및 조작할 수 있는 기능을 제공한다.

2. SQL (Structured Query Language)

관계형 데이터베이스에서 데이터 정의, 조작, 제어를 하기 위해 사용하는 언어다.
ANSI/ISO 를 통해 표준화 되고 있다.

SQL 명령의 종류

DML (데이터 조작어)

SELECT (== retrieve), INSERT, UPDATE, DELETE

DDL (데이터 정의어)

CREATE, ALTER, DROP, RENAME

DCL (데이터 제어어)

GRANT, REVOKE
권한을 주거나 회수한다

TCL (트랜젝션 제어어)

COMMIT, ROLLBACK

3. Table

테이블은 데이터를 저장하는 객체(OBJECT)로서 관계형 데이터베이스의 기본 단위이다.
관계형 데이터베이스는 모든 데이터를 칼럼과 행의 2차원 구조로 나타낸다.
칼럼은 특정 속성을 나타낸다.
칼럼과 행이 겹치는 하나의 공간을 필드라고 한다.

정규화 : 테이블을 분할하여 데이터의 정합성을 확보하고, 불필요한 중복을 줄이는 프로세스
기본키(PRIMARY KEY) : 테이블의 각 행들을 식별할 수 있는 한 개 이상의 칼럼
외래키(FOREIGN KEY) : 다른 테이블의 기본키로 사용되고 있는 관계를 연결하는 칼럼

4. ERD (Entity Relationship Diagram)

ERD 의 구성요소는 엔터티, 관계 속성 3가지 이다.

제 2절 DDL (Data Definition Language)

1. 데이터 유형

character(s)

s 만큼의 고정 길이 문자열 정보
기본 1byte 최대 2000byte

varchar(s)

가변 길이 문자열 정보

char 와 varchar의 '비교 방법'
char는 비교할 때 공백을 채워서 비교한다. 
varchar 공백이 다르면 다른 문자로 판단한다. 공백도 하나의 문자로 취급한다. 

numeric

정수, 실수 등 숫자 정보
처음에 전체 자리수, 뒤에 소수 부분 자리 수를 지정한다
전체 8자리이고 소수 부분2자리 라면 number(8, 2)

date

날짜와 시각 정보

2. CREATE TABLE

구문 형식

CREATE TABLE 테이블명(
    PLAYER DATATYPE [DEFAULT 형식] NOT NULL,
    TEAM DATATYPE [DEFAULT 형식] NOT NULL,
    STADIUM_ID CHAR(3) NOT NULL,
    CONSTRAINT PALYER_PK PRIMARY KEY (PLAYER),
    CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID)
);

주의사항

테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.
한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.
칼럼 뒤에 데이터유형은 반드시 지정해야 한다.
벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.
A-Z, a-z, 0-9, '_', '$', '#' 문자만 허용한다.

칼럼에 대한 제약조건이 있으면 CONSTARINT 를 이용하여 추가할 수 있다.
DATETIME 데이터 유형에는 별도로 크기를 지정하지 않는다.
제약조건은 칼럼의 데이터 유형 뒤에 작성하는 칼럼 LEVEL 정의 방식이 있고, CONSTRAINT 로 테이블 LEVEL 정의 방식이 있다. 기능은 동일 하다.

제약조건의 종류

  • PRIMARY KEY (기본키)
    행 데이터를 고유하게 식별하기 위한 기본키를 정의한다.
    하나의 테이블에 하나의 기본키 제약만 정의할 수 있다.
    ( PK = NOT NULL + UNIQUE KEY )

  • UNIQUE KEY (고유키)
    행 데이터를 고유하게 식별하기 위한 고유키를 정의한다.
    단, NULL은 고유키의 제약 대상이 아니다. (NULL 여러개 가능)

  • NOT NULL
    NULL 값 입력을 금지한다.

  • CHECK
    입력할 수 있는 값의 '범위'를 제한한다.
    제약으로는 TRUE or FALSE 로 평가할 수 있는 '논리식'을 지정한다.

  • FOREIGN KEY
    테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우에 외래키가 생성된다.

SELECT 문장을 통한 테이블 생성

CTAS (create table ~ as select ~)
기존 테이블을 이용하여 테이블을 생성하면 데이터유형을 재정의 안 해도 된다는 장점이 있다.
단, 주의할 점은 기존 테이블의 제약조건 중에 NOT NULL만 새로운 복제 테이블에 적용이 된다. 나머지 PK, FK 등의 다른 제약 조건은 없어진다. ALTER TABLE로 제약조건 추가하는 작업이 필요하다.

3. ALTER TABLE

ADD COLUMN

ALTER TABLE 테이블이름 
ADD 칼럼이름 DATATYPE;

주의 할 점은 추가할 칼럼의 위치를 지정할 수 없다는 것이다.

ALTER TABLE TEAM
ADD ADDRESS VARCHAR(20);

DROP COLUMN

ALTER TABLE 테이블이름
DROP COLUMN 삭제할 칼럼이름;

주의 할 점은 한 번 삭제된 칼럼은 복구가 불가능하다.

ALTER TABLE TEAM
DROP COLUMN ADDRESS;

MODIFY COLUMN

칼럼의 제약조건, 디폴트값, 데이터유형을 변경할 수 있다.

ALTER TABLE 테이블이름
MODIFY (칼럼이름1 데이터유형 [DEFAULT 값] [NOT NULL],
        칼럼이름2 데이터유형);
  • 해당 칼럼이 NULL값만 가지고 있거나 테이블에 아무 행 도 없으면 칼럼의 폭을 줄일 수 있다.
  • 해당 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못한다. (기존 데이터가 훼손될 수 있기 때문이다.)
  • 해당 칼럼의 DEFAULT값을 변경 할 수 있지만, 변경 작업 이후 발생한 행에만 영향을 미친다.
  • 해당 칼럼에 NULL 값이 없는 경우에만 NOT NULL 제약조건을 추가할 수 있다.

RENAME COLUMN

칼럼명을 변경해야 하는 경우에 RENAME COLUMN 문구를 사용한다.

ALTER TABLE 테이블이름
RENAME COLUMN 변경해야 할 칼럼 TO 새 칼럼이름;

ALTER TABLE TEAM
RENAME COLUMN ADDREEE TO ADDRESS;

DROP CONSTRAINT

제약조건을 삭제하는 명령어.

ALTER TABLE 테이블이름
DROP CONSTARINT 제약조건이름;

ADD CONSTRAINT

제약조건을 추가하는 명령어.

ALTER TABLE 테이블이름 
ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);

ALTER TABLE PLAYER
ADD CONSTRAINT TEAM_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);

4. RENAME TABLE

RENAME으로 테이블이름을 변경할 수 있다
RENAME 테이블이름 TO 새 테이블이름

5. DROP TABLE

테이블의 구조 및 데이터 전부를 삭제한다.

DROP TABLE 테이블이름 [CASCADE CONSTRAINT];

CASCADE CONSTRAINT : 삭제 할 테이블과 관계 있는 제약조건까지 전부 삭제하는 옵션

6. TRUNCATE TABLE

테이블의 모든 행들을 삭제하고 재사용하기 위한 명령.
테이블 구조 자체가 삭제되는 것은 아니다.

TRUNCATE TABLE 테이블이름;

DELETE 보다 시스템 부하가 적다.
단, TRUNCATE TABLE의 경우 정상적인 복구가 불가능하므로 주의하여 사용해야 한다.

728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 3 : TCL  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27
Toad TNS file 검증 에러  (0) 2020.02.21
실습 환경 만들기 - Toad 설치  (0) 2020.02.21
실습 환경 만들기 - Oracle XE 설치  (0) 2020.02.21

MySQL이 테이블이름을 쓸 때 대소문자를 구분하는 바람에 불편했다. 

(Ubuntu 16.04에서 MySQL 5.7 버전 사용 )

 

 

대소문자 구분하지 않게 하려면 lower_case_talbe_names 서버가 쓰는 변수를 수정해야 한다. 

 

근데, read only 변수다. 

 

my.cnf 가  없길래 뒤져보니까

 

mysql server 설정 파일 mysqld.cnf 파일이 있었다. sudo로 열어야 한다. 

$sudo vim mysqld.cnf

여니까 서버 설정파일이라고 써있다. 

 

[mysqld] 밑에 lower_case_talbe_names = 1 이라고 추가해주고 저장하자. 

 

설정 하나를 바꿨으니까 mysql 을 재시작 해보자.

mysql -uroot -p로 접속하고 변수명을 조회해보니까 잘 바뀌어 있다. 

적용이 되었는지 mysql 커맨드라인에서 확인해보자. 

아래처럼 명렁을 쳐보니까 0으로 잘 바뀌어 있다. 

 

 

728x90

virtual box 에서 우분투16.04LTS 가상머신을 쓰는데,

재로그인 하거나 재부팅 할 때 자꾸 화면이 찌그러지거나 모니터 못쓴다는 경고가 나왔다. 

 

아래와 같은 증상이다. 

 

검색해보니, 해결책은 monitors.xml 을 삭제하거나 이름을 변경하라는 내용이었다. 

 

$rm $HOME/.config/monitors.xml

 

monitors.xml 은 모니터구성을 저장하는 설정파일이다.

내 경우에는 rm으로 파일을 지우고 재부팅했더니 팝업이 뜨지 않고 화면도 안찌그러졌다. 

 

 

참고 (askubuntu.com)

https://askubuntu.com/questions/67337/how-do-i-get-rid-of-this-monitor-error

 

How do I get rid of this monitor error?

I have an Nvidia card and two monitors. Every time I log in to Unity on Ubuntu 11.10, I get this error: "Could not apply the stored configuration for monitors" I have tried opening nvidia-settin...

askubuntu.com

 

728x90

가상머신 만들고 다룰때 유의할 사항을 모아 포스팅한다. 

 

우분투 가상머신의 디스크 크기를 10GB로 잡은 바람에... 크기를 재할당하는데도 애를 먹어서 가상머신을 다시 올리게 된 적이 있다. 

 

앞으로 디스크 크기는 항상 32GB 이상으로!

 


우분투 가상머신 설치 (virtual box 사용)

 

https://hiiambk.tistory.com/482

 

1. 가상머신(VirtualBox)에 우분투 설치(Ubuntu 16.04)

http://releases.ubuntu.com/16.04/ ubuntu-16.04.6-desktop-amd64.iso 다운로드 1시간 이상 소요 D:\Ubuntu16.04 폴더 생성 새로 만들기 이름 설정_종류와 버전은 자동 선택됨, 확인 메모리 크기 설정(4096..

hiiambk.tistory.com

 

 

가상머신 화면사이즈 조정

 

가상머신 실행 후, 버추얼박스의 메뉴 중 [장치 > 게스트 확장 CD 이미지 삽입]을 선택한다.

실행해서 root암호를 넣는다. 

설치가 끝나면 enter 치고 재부팅한다. 

재부팅후에 까만화면만 나오는 경우가 있는데, 가상머신 화면을 드래그로 죽 늘여보거나 하면 제대로 켜진것을 확인할 수 있었다.

참고 - https://technote.kr/157

 

버추얼박스의 메뉴 중 [보기 > 가상화면1 > 원하는해상도 클릭] 하면 편하다. 

 

 

영문 디렉토리명으로 변경

 

터미널을 연다 (ctrl + alt + t )

ls 명령으로 현재 디렉토리명이 한글로 되있는지 확인한다. '다운로드'이런식이면 영문으로 바꾸자. 

아래와 같은 명령 두줄을 입력한다. 

$export LANG=C

$xdg-user-dirs-gtk-update 

 

Update 버튼을 누르자. ls 명령어로 디렉토리명이 제대로 변경되었는지 확인하자. 

 

 

한글 사용 세팅 

 

fcitx를 설치한다. 

# sudo apt-get install fcitx-hangul

 

한영키를 설정한다. 

 

Setting -> Text Entry 에 가서 Korean이 아니라, Hangule 을 추가해놓는다.

 

https://gomcine.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-1604-LTS-%ED%95%9C%EA%B8%80-%EC%84%A4%EC%B9%98-%EB%B0%8F-%ED%95%9C%EA%B8%80%EC%A0%84%ED%99%98-%EC%84%B8%ED%8C%85

728x90

쿠키를 이용한 인증 기능을 구현한다. 

728x90

'프로그래밍 > Node.js' 카테고리의 다른 글

could not apply the stored configuration for monitors  (0) 2020.04.16
Virtual box에서 우분투 가상머신 만들고 세팅  (0) 2020.04.15
HTTP Cookie  (0) 2020.04.11
Node.js npm pm2  (0) 2020.04.05
MySQL 명명 규칙  (0) 2020.03.23

+ Recent posts