C-R-U-D

김재령·2022년 2월 25일
0

DB

목록 보기
1/15
post-thumbnail

CURD-[CRATE, READE, UPDATE, DELETE]

CAREAT SEQUENCE

create sequence cafe_seq
start with 1// 1부터 시작
maxvalue 999999999// 마지막 번호
increment by 1// 증가 값
nocache// 시퀀스를 빨리 제공하기 위해 메모리에 캐쉬 지정 (nocache 일 경우 20으로 고정)
nocycle;// 최대값 도달 시 시퀀스 생성 중단

CAREAT TABLE

create table Table_name(
idx number default CAFE_SEQ.nextval primary key,// 시퀀스를 사용할 때는 앞에 default를 붙여줘야 한다
name varchar2(1000) not null,
menu varchar2(1000) not null
);
*한글은 3byte

Value type

CHAR                        vs.                    VARCHAR
CHAR(size[byte|CHAR])                         VARCHAR2(size[BYTE | CHAR])

만약 id컬럼의 데이터를 저장하려고 하는데 char와 varchar를 각 50으로 지정했다고 가정하자
사용자가 id를 10글자만 입력했다 그러면 char는 10이 저장되고 40이라는 공간이 남는다
반면 varchar는 50의 공간을 10의 크기로 줄여 저장하기 떄문에 가변적인 문자열이 들어오는 데이터의 경우 varchar를 사용하는 것이 좋다
-> varchar는 구분자로 구분하기 때문에 검색을 하기에 번거롭다. 서로 사용목적에 따른 장단점이 있다

LONG
-> variable-length character strings containing up to 2 gigabytes-1
CLOB
-> 대용량 텍스트 데이터 타입(최대 4기가) -> 많이 사용함
NCLOB
-> 대용량 텍스트 유니코드 데이터 타입(최대 4기가)

NUMBER(정수와 실수를 동시에 처리함)
NUMBER(4) -> 최대 4자로 이루어진 숫자
NUMBER(6,2) -> 소수점 2자리를 포함하는 최대 6자리의 숫자
NUMBER(6,-2) -> 소수점 -2자리에서 반올림하는 최대6자리의 숫자
NUMBER-> NUMBER(38,) 맥시멈 38자리
NUMBER(
,5)-> NUMBER(38,5)

TIMESTAMP -> NLS_TIMESTAMP_FORMAT 파라미터에 명시된 값을 따른다
(TIMESTAMP -> 그 시간을 스탬프로 찍어버리는 느낌)
select * from NLS_DATABASE_PARAMETERS;-> 이걸 기준으로

alter table mem (modify) id NVARCHAR2(50);
-> 테이블 변경하기

alter table mem (drop column) age;
-> 컬럼 삭제하기

alter table mem (add) email VARCHAR(200);
-> 컬럼 추가하기

--> 수정을 하는 경우는 데이터베이스를 구축하는 초기에 많이 사용하고 후기로 갈수록 많이 사용하지는 않는다

insert into mem values('id','pwd','name','gender',age,'email');
-> 모든 필드 값을 입력하기

insert into mem(id, pwd) values('newlec','111');
-> 원하는 필드만, 원하는 순서대로 입력하기 -> 그럼 빈 공간은 ?? null값이 들어가죠
insert into mem(id, pwd) values('jeons','111');
insert into mem(id, pwd) values('geni', '123');

select id, name, pwd from mem;

select id as 아이디, name, pwd from mem;
-> 별칭사용하기 id as 아이디 로 사용하면 컬럼명을 변경할 수 있다(as는 생략이 가능하다)
-> 빈 공백을 넣고 싶으면 select id "user id", name, pwd from mem;
-> 그럼 " "안에 들어간 문자는 대문자면 대문자로 소문자면 소문자로 출력이 된다

update mem set pwd='111';
-> update하겠다 setting을 pwd를 111로 모두 다
-> 그럼 모든 비번이 111로 변경되기 때문에 매우매우 위험핟

그래서
update mem set pwd='231' where id ='jeons';
-> where로 조건을 주어서 변경해줘야 한다

--> 오라클은 같은 계정이어도 사용자의 접속 정보를 따로 관리하기 때문에 세션별로 관리한다
--> 그래서 같은 계정으로 하나 더 열어도 결과가 다르다
만약 두개 이상의 컬럼을 업데이트하고 싶다면??
update mem set pwd='123', name='손고쿠' where id='jeons';
--> 콤마로 구분자를 해주고 다음 컬럼의 내용을 입력해준다

삭제를 하고 싶다면
delete mem where id='test';

DDL - 데이터 정의어

테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 (생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함 #### Create - 생성 #### Alter - 테이블 컬럼/제약조건 수정 #### Drop - 테이블 완전히 삭제(자동 commit) #### Rename - 테이블명 변경 #### Truncate - 테이블 삭제(create table 직후의 상태로 되돌리기, 자동 commit)

DML - 데이터 조작어

DB안의 데이터에 조회,삽입,수정,삭제 등의 데이터의 변형을 주는 명령어

Select

select * from [테이블 명] where [컬럼 명] order by [정렬할 컬럼] desc/asc

select * from cafe order by idx;

select에는 컬럼을 선택하거나 컬럼의 연산 또는 as를 통해서 별칭을 줄 수 있었다 -> 필터링 (정규식, LIKE ,distinct)

Insert

insert into [테이블이름] values (테이블에서 작성했던 컬럼 순서대로 값 넣어주기)

insert into [테이블 이름(컬럼명, 컬럼명)] values (값1, 값2);

insert into cafe values (cafe_seq.nextval, '이디야','아메리카노');

Delete

delete from [테이블 명] where [컬럼 명] = 컬럼 값;

Update

update [테이블 명] set [컬럼 명]='수정할 값', [컬럼 명]='수정할 값' where [수정할 idx] = 수정할 idx 값;

DCL - 데이터 제어어

DB에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어

Grant - DB 를 접근할 수 있는 권한부여

GRANT SELECT, INSERT, DELETE, UPDATE ON [TABLE NAME] TO [USER] ;

Rvoke - DB 를 접근할 수 있는 권한 회수

REVOKE SELECT, INSERT, DELETE, UPDATE ON [TABLE NAME] FROM [USER] ;

TCL - 트랜잭션 제어어

DML에 의해 조작된 결과를 제어하는 명령어

  • [트랜잭션이란?]
    -데이터 처리의 단위

Commit - 저장

Rollback - 되돌리기

SELECT * FROM 테이블명
AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '원하는시간' MINUTE);
->원하는 시간 이전의 데이터가 조회가능합니다.

ex)
1). 일단 기존의 데이터는 새로 백업을 합니다.
(백업 생략 가능)

2). 변경 데이터는 DELETE를 해줍니다.
(DELETE FROM 테이블명)

3). 기존 데이터로 INSERT를 해줍니다.
INSERT INTO 테이블명 SELECT * FROM 테이블명 AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '원하는시간' MINUTE);
※ 위의 방법은, 테이블 안의 모든 데이터를 삭제 후, 새로 입력하는 방법입니다

COMMIT 명령어와 ROLLBACK 명령어의 장점

  • 데이터 무결성이 보장된다.
  • 영구적으로 변경하기 전에 데이터의 변경사항을 확인할 수 있다.
  • 논리적으로 연관된 작업을 그룹화할 수 있다.

Ack

Savepoiont - 특정 부분에서 트랜잭션을 취소시킬 수 있는 명령어

SAVEPOINT [세이브포인트 명]

ROLLBACK TO [저장된 세이브포인트 명]

INSERT INTO Practice VALUES(3,'TEST1');
SAVEPOINT onePoint;

INSERT INTO Practice VALUES(4,'TEST1');
SAVEPOINT twoPoint;

profile
with me

0개의 댓글