카테고리 없음

sql 정리 클립보드

웹꽃기사 2021. 3. 12. 10:25

https://www.evernote.com/shard/s727/sh/6daa1e01-ee10-4b48-a0e6-72dcc438cd11/322e3cff39b2667ad396d63704954a25

a.0 데이터베이스 명령어 모음

DML select 'private String ' ||lower(column_name)||';' from user_tab_columns where table_name='MEMBER'; SELECT - DB에서 원하는 데이터만 출력해주는 명령어이다 . 형식 SELECT + (컬럼1,컬럼2,컬럼3, ...) + FROM + 테이블 이

www.evernote.com


DML

select 'private String ' ||lower(column_name)||';'

from user_tab_columns

where table_name='MEMBER';



SELECT - DB에서 원하는 데이터만 출력해주는 명령어이다 . 

형식

SELECT + (컬럼1,컬럼2,컬럼3, ...) + FROM + 테이블 이름 + WHERE + 조건 ;

기호 * 선택시 테이블의 모든 컬럼을 선택 , DB에서 모든 컬럼을 호출하는 것은 많은 시간을 초래하기 때문에 필요한 컬럼만 선별 삭제하는 것이 좋다 . 그래서 원하는 컬럼만 입력해서 출력한다 ....

WHERE 다음 조건이 나오는데 WHERE 다음 나올수 있는 조건문으로는 컬럼이름, 표현식, 상수, 서브쿼리, 비교 연산자 등 다양하게 들어갈수 있다

ex)  SELECT id,pwd,name,address FROM member WHERE id = (SELECT id FROM friend WHERE name='이승주');

 

 

INSERT - DB에 데이터를 입력할때 사용하는 명령어이다 .

형식

INSERT INTO + 테이블명 + VALUES('컬럼1','컬럼2','컬럼3','컬럼4'....);

value 값들은 여러개 들어가기 때문에 단수가 아니라 복수인 values를 사용해준다 ... 입력할 데이터 값은 테이블의 컬럼 이름과 동일한 값을 넣어주어야 한다 . 즉 입력 위치가 틀리면 곤란하다 .또한 values들은 primary key 값을 기준으로 입력하게 되는데 테이블 생성시 설정된 key 값에 의거한다. 입력시에는 어느 일부분은 입력해주고 다른 입력은 안해주는 조건을 붙일 필요 없이 NOT NULL 값이 아닌 부분에 한해서는 NULL or ' ' 을 입력해 주기 때문에 조건절인 WHERE + 조건문을 사용할 필요가 없다 .

ex) INSERT INTO member VALUES(1,'1234','모모님','서울시 양천구 목동');

UPDATE - DB에 입력된 데이터를 수정할때 사용하는 명령어이다 .

형식

UPDATE + 테이블명 + SET (컬럼='바꿔줄 값'...) + WHERE + 조건문;  

update 문에서 테이블 명 앞에 from이 붙지 않는다 . 그 대신 재 설정해준다는 의미의 set을 사용해준다 ....

ex) UPDATE member SET name='바보니?' WHERE id=1;

 

DELETE - DB에 입력된 데이터를 삭제해줄때 사용하는 명령어이다.

형식

DELETE + FROM + 테이블명 + WHERE + 조건문 ;

delete문은 행(레코드)를 모두 삭제하기 때문에 부분 부분 원하는 칼럼만 골라 삭제하는 것은 불가능하다. 그래서 delete 다음 컬럼명이 나오지를 않고 바로 from 문이 나오는 것이다 . delete 이외에 drop와 truncate 문이 있다 ..

ex) DELETE FROM member WHERE id=1;



 DDL


 

CREATE - DB에 테이블을 생성해주는 명령어이다 .

형식

CREATE + TABLE + 테이블명 + (컬럼1 형식(들어갈 용량) primary key not null, 컬럼2 형식(값), .....);

create 문을 작성할 시 기본키값(primary key)을 설정해 주거나 not null 값도 설정해 주는데 기본키값을 기준으로 서로 join해주기 때문에 중복되지 않는 ID 혹은 주민번호를 기본키 값으로 설정해준다 .. 그리고 반드시 입력해 주어야 하는 부분은 not null 값을 설정해주어서 반드시 입력해준다 . 문자 입력시 char 혹은 varchar2을 사용해주는데 들어갈 용량이 고정적이지 않고 유동적인 varchar2를 사용하도록 하자 그래야 메모리 할당 공간이 줄어들어 속도가 향상된다. 참고적으로 varchar2의 최대용량은 4000글자이다 . 숫자는 int 혹은 member를 사용하고 날짜인 경우 date or varchar2를 사용해줄수 있다 .

ex) CREATE TABLE member(id varchar2(10), pwd int(10), name varchar(20), address varchar(100), content varchar2(4000));

 

 

ALTER - 테이블의 컬럼을 추가, 삭제, 수정, 이름변경 등이 가능하게 해주는 기능을 하는 명령어이다.

 

1. ADD

ALTER TABLE + 테이블명 + ADD (컬럼 형식(용량));

테이블에 컬럼을 추가하는 기능을 한다 .

ex) ALTER TABLE member ADD phone varchar2(20);

 

2. DROP

ALTER TABLE + 테이블명 + DROP COLUMN + 컬럼;

테이블에 있는 컬럼(열) 삭제해주는 기능을 한다 . 레코드(행)을 삭제해줄 경우 DELETE문을 사용해준다 ...

ex) ALTER TABLE member DROP COLUMN phone;  

 

3. MODIFY

ALTER TABLE + 테이블명 + MODIFY + 컬럼 + 변경해줄 형식,속성(용량);

컬럼의 속성 값을 변경해주는 기능을 한다 . int ->varchar2 로 바꾸어 줄수 있다 . 이때 주의 할 점은 이미 테이블에 데이터가 있을 경우 유사한 형식으로 고쳐주어야 한다 . 예를 들어 char -> varchar2 ,int -> number, date -> varchar2 로 변경 가능하지만 char -> int로 변경은 불가능하다 문자는 숫자가 될수 없기 때문이다 .

ALTER TABLE member MODIFY pwd varchar(10);

 

4. RENAME

ALTER TABLE + 테이블명 + RENAME COLUMN + 구 컬럼 + TO + 신 컬럼(변경해줄 이름);

테이블에 있는 컬럼 이름을 변경해 줄 경우 사용해주는 명령문이다 ..

ALTER TABLE member RENAME COLUMN pwd TO password;

 

 

RENAME - 테이블의 이름을 변경 해 준다

형식

RENAME + 구 테이블명 + TO + 신 테이블명 ;

ex) RENAME member TO client;

 

 

DROP - 테이블을 삭제해주는 기능을 한다 .

형식

DROP TABLE + 테이블명 + CASCADE CONSTRAINTS ;

테이블을 삭제하기 위한 DDL 명령문이다 . 삭제할 테이블이 기본키나 고유키를 다른 테이블에서 삭제시 삭제 불가능하다 . 이럴때 CASCADE CONSTRAINTS(무결성  제약조건 무시) 명령문을 사용해 삭제해줄 수있다 .

ex)DROP TABLE member CASCADE CONSTRAINTS;

 

TRUNCATE - 테이블의 내용 모두를 삭제해준다 .

형식

TRUNCATE TABLE + 테이블 이름 ;

테이블을 삭제하기 위한 명령문이다 . drop과 차이점은 drop의 경우 테이블 틀까지 전부 삭제하지만  truncate명령문은 테이블의 틀은 유지하고 내용만 그대로 삭제한다 .  delete 역시 내용만 삭제하지만  truncate와 차이가 있다 . delete의 경우 where 조건절을 이용해 한 행만 삭제할수 있지만 truncate명령문의 경우 한행만 삭제할수 없다 전부 삭제한다 .. 또한 delete 경우 commit을 하지 않으면 복구 가능하지만 truncate의 경우 복구가 불가능하다 .. 

 

COMMIT - 트랜잭션안의 모든 SQL 명령문에 의해 변경된 작업을 하드 디스크에 영구적으로 저장하는 명령문

커밋 명령문을 하지 않으면 저장이 되지 않아서 변경된 값을 적용할수 없다 .

 

ROLLBACK - 트랜잭션안의 모든 SQL 명령문에 의해 변경된 작업을 취소하고 원래 상태로 복구하는 명령문

롤백이 복구 기능을 하지만 commit으로 저장해버린 상태라면 복구 불가능하고 commit으로 저장된 시점으로 되돌아 간다.

 

 DCL

 

GRANT - 데이터 베이스 사용 권한을 주는 DCL 명령어이다

 

REVOKE -  데이터 베이스 사용 권한을 취소해주는 DLC 명령어이다 .

 

※ 조건절에는 컬럼이름, 표현식, 상수, 서브쿼리, 비교 연산자 등 다양하게 들어갈수 있다 .


※ DML 명령문과 DDL명령문의 차이점 .

둘다 수정 삭제가 가능하지만 DML 명령문은 COMMIT을 하지 않는한 ROLLBACK라는 명령문으로 되돌릴수 있다 .

그러나 DDL명령문은 한번 실행하면 두번 다시 복구할수 없다 ...

 

※ ALTER, DROP, TRUNCATE 명령문은 TABLE과 항상 같이 사용해 준다 .

또한 ALTER 문에 있는 DROP와 RENAME은 독립적으로 사용이 가능한데 그럴 경우 컬럼이 아니라 테이블을 삭제해주거나 변경해준다 .

 

※ GRANT 와 REVOKE 명령어는 프로그래머가 자주 사용하는 명령어가 아니라 DB관리자들이 사용하는 명령어이다 .

실제로 프로그래머들이 GRANT와 REVOKE를 사용하는 일은 드물다 .


----------------------------------------------------------------



1. 계정의 테이블 스페이스 생성


create tablespace [tablespace_name] 

datafile '/home/oracle/oradata/DANBEE/[file_name].dbf' size 500m;


예)

CREATE TABLESPACE ADMIN DATAFILE 'D:\ORACLE\ORADATA\XE\ADMIN.dbf' SIZE  500M ;



2. 오라클 유저 만들기


CREATE USER [user_name] 

IDENTIFIED BY [password]

DEFAULT TABLESPACE [tablespace_name]

TEMPORARY TABLESPACE TEMP;


예)

CREATE USER nextree IDENTIFIED BY nextree DEFAULT TABLESPACE NEXTREE TEMPORARY TABLESPACE TEMP;



3. 생성한 USER에 권한주기


GRANT connect, resource, dba TO [user_name];


예)

grant connect, dba, resource to 유저명; (모든 권한 주기)


GRANT CREATE SESSION TO 유저명         // 데이터베이스에 접근할 수 있는 권한

GRANT CREATE DATABASE LINK TO 유저명

GRANT CREATE MATERIALIZED VIEW TO 유저명

GRANT CREATE PROCEDURE TO 유저명

GRANT CREATE PUBLIC SYNONYM TO 유저명

GRANT CREATE ROLE TO 유저명

GRANT CREATE SEQUENCE TO 유저명

GRANT CREATE SYNONYM TO 유저명

GRANT CREATE TABLE TO 유저명             // 테이블을 생성할 수 있는 권한

GRANT DROP ANY TABLE TO 유저명         // 테이블을 제거할 수 있는 권한

GRANT CREATE TRIGGER TO 유저명 

GRANT CREATE TYPE TO 유저명 

GRANT CREATE VIEW TO 유저명


GRANT  

 CREATE SESSION

,CREATE TABLE

,CREATE SEQUENCE   

,CREATE VIEW

TO 유저명;


4. 생성한 USER로 ORACLE에 접속하기


sqlplus nextree/nextree[@db_sid]



5. 계정 삭제하기


drop user 사용자계정 cascade;


-- 테이블 스페이스 크기 확장해주는 쿼리문

alter database 

datafile 'D:\oracle\oradata\XE\ADMIN.DBF'  resize 900M;

--테이블 스페이스 정보 보는 쿼리문 

SELECT file_name, tablespace_name, bytes, status FROM  DBA_DATA_FILES;

--테이블 명시적 인덱스 생성

--1번째 방법

CREATE INDEX MSID_IDX1 ON TEST(MSID)

--2번째 방법

create index test1_test on test1(test) 

tablespace users 

storage 



initial 10k 

next     10k 

pctincrease 0) 

pctfree 10

--테이블 정보 보는 쿼리

select * from user_constraints-- where table_name = upper('test1');

--ORA-00054: 자원이 사용중이고, NOWAIT가 지정되어 있습니다 해결 방법 

select a.sid, a.serial# 

from v$session a, v$lock b, dba_objects c 

where a.sid=b.sid and 

b.id1=c.object_id and 

b.type='TM' and 

c.object_name='CAR_INFO';

alter system kill session '12, 27846';

-- CAR_INFO에는 있는 값을 DASH_BOARD에 넣기

INSERT INTO DASH_BOARD(CAR_LICEN_NUM)

SELECT CAR_LICEN_NUM FROM CAR_INFO

MINUS

SELECT CAR_LICEN_NUM FROM DASH_BOARD


SYSTEM 계정 패스워드 변경하기

사용자계정 : /as sysdba


alter user system identified by "암호";

일반 스트링은 관계없지만 특수문자가 있을경우 반드시 "" 따옴표로 감싸준다.