5일차 내용 정리

채공부·2025년 5월 28일

DDL (데이터 정의어)

  • 어떤 개체를 만들 때
CREATE USER ...
CREATE SEQUENCE ...
CRATE TABLE ...
CRATE VIEW ...
  • 어떤 개체를 삭제할 때
DROP TABLE ...
DROP USER ...
DROP SEQUENCE ...
DROP VIEW ...
  • 어떤 개체를 수정(변경)할 때
ALTER USER ...
ALTER TABLE ...
ALTER VIEW ...
	  SEQUENCE 는 변경 불가

표 형식 TABLE

CREATE TABLE TEST(num NUMBER, name VARCHAR2(10));
INSERT INTO TEST(num, name) VALUES(1, 'kim');
INSERT INTO TEST(num, name) VALUES(2, 'lee');
INSERT INTO TEST(num, name) VALUES(3, 'park');
---------------------
   NUM   |	  NAME  
---------------------
    1	 |	  kim
    2	 |	  lee
    3	 |	  park    
---------------------

INSERT INRO TEST(num, name) VALUES(4, 'kim');
---------------------
   NUM   |	  NAME  
---------------------
    1	 |	  kim
    2	 |	  lee
    3	 |	  park    
    4	 |	  kim  
---------------------
-> 이름의 경우 중복인 경우가 많기에 중복값이 들어가도 괜찮다

INSERT INTO TEST(num, name) VALUES(1, 'kim');
---------------------
   NUM   |	  NAME  
---------------------
    1	 |	  kim
    2	 |	  lee
    3	 |	  park    
    4	 |	  kim  
    1	 |	  kim
---------------------
-> 구분하는 숫자의 경우 중복된 값이 있다면 데이터의 구분이 힘들기에 '기본키' 제약조건 필요

COLUMN LEVEL의 제약조건 부여

CREATE TABLE TEST(
	   num NUMBER CONSTRAINT test_num_pk PRIMARY KEY,
       name VARCHAR2(10)
);

TABLE LEVEL의 제약조건 부여

CREATE TABLE TEST(
	   num NUMBER,
       name VARCHAR2(10),
       CONSTRAINT test_num_pk PRIMARY KEY(num)
);

컬럼 데이터 타입 수정

ATLER TABLE TEST MODIFY name VARCHAR2(20);

DESC TEST
NAME      Null?     Type
--------- --------- --------------
NUM			        NUMBER
NAME      NOT NULL  VARCHAR2(20)

테이블 삭제

DROP TABLE TEST;

TEST TABLE 생성

CREATE TABLE TEST(
	   num NUMBER CONSTRAINT test_num_pk PRIMARY KEY,
       name VARCHAR2(20) CONSTRAINT test_name_nn NOT NULL,
       addr VARCHAR2(20)
);

SEQUENCE 생성
한 번 만들어진 SEQUENCE는 수정 불가

CREATE SEQUENCE my_seq;

자동으로 숫자 값이 증가하는 지 확인

SELECT my_seq.NEXTVAL FROM DUAL;

10씩 증가하는 SEQUENCE 생성

CREATE SEQUENCE your_seq
	INCREMENT BY 10;

10부터 시작해 10씩 증가하는 시퀀스 생성

CREATE SEQUENCE your_seq
	   START WITH 10       -> 시작값 
	   INCREMENT BY 10;	   -> 증가값

만들어진 테이블 정보

USER_TABLE VIEW에서 조회

만들어진 제약조건

USER_CONSTRAINTS VIEW에서 조회

만들어진 시퀀스 정보

USER_SEQUENCES VIEW에서 조회

해당 테이블에서 사용할 시퀀스를 만들어서 어떤 컬럼에 숫자를 저장할 때 사용 시 "테이블_SEQ"

해당 SEQUENCE 생성

CREAT SEQUENCE TEST_seq;

숫자 자동 증가값 추가

INSERT INTO TEST VALUES(TEST_seq.NEXTVAL, 'kim', 'seoul');
INSERT INTO TEST VALUES(TEST_seq.NEXTVAL, 'lee', 'seoul');
INSERT INTO TEST VALUES(TEST_seq.NEXTVAL, 'park', 'pusan');

날짜 컬럼이 들어있는 테이블 생성

CREATE TABLE TEST(
	   num NUMBER CONSTRAINT test_num_pk PRIMARY KEY,
       name VARCHAR2(20) CONSTRAINT test_name_nn NOT NULL,
       createdAt DATE
);

TO_CHAR( )와 TO_DATE( )

           TO_CHAR()
           -------->
날짜                         문자
(DATE)                     (CHAR)
           <--------
           TO_DATE()

날짜 컬럼에 날짜 형식의 데이터 삽입

INSERT INTO TEST(num, name, createdAt)
VALUES(test_seq.NEXTVAL, 'park', TO_DATE('19990108103015', 'YYYYMMDDHHMISS'));

TEST TABLE 조회

SELECT num, name,TO_CHAR(createdAt, 'YYYY.MM.DD AM HH:MI:SS') createdAt FROM TEST;

NUM  NAME    CREATEDAT
---- ------- ------------------------
4    kim     2025.05.28 오전 11:45:05
5    lee     2025.05.28 오전 11:45:39
6    park    2025.05.28 오전 11:46:06
7    oh      1999.11.23 오전 12:00:00
8    park    1999.01.08 오전 10:30:15

DML (데이터 조작어)

COMMIT 하기 전까지는 임시 반영 -> 트랜잭션이 관리된다는 증거

INSERT

INSERT INTO 테이블명(컬럼1, 컬럼2, 컬럼3) VALUES(데이터1, 데이터2, 데이터3);

UPDATE

UPDATE 테이블명 SET 컬럼1 = 데이터1 WHERE 컬럼2 = 데이터2;

DELETE

DELETE FROM 테이블명 WHERE 컬럼 = 데이터;

동시 트랜잭션 간 충돌으로 인한 잠금(Lock)


2개 이상의 동시 작업으로 인한 TABLE에 ROCK이 걸리는 경우, 해결은 COMMIT or ROLLBACK

학원의 컴퓨터는 동일 네트워크상에 있고 각 컴퓨터 간 가상의 IP 주소가 존재
포트가 열린 경우 외부로 나가서 해당 sqlplus 접속이 가능

본인의 ip주소 확인 = ipconfig

연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : XXXX::XXXX:XXXX:XXXX:XXXXXX
   IPv4 주소 . . . . . . . . . : XXX.XXX.XXX.XXX
   서브넷 마스크 . . . . . . . : 255.255.255.255
   기본 게이트웨이 . . . . . . : XXX.XXX.XXX.XXX

원격 접속 방법

외부에서 안 쪽으로 들어오는 걸 '인바운드'

sqlplus 계정/비밀번호@아이피주소:포트번호/서비스명(XE)
ex) sqlplus scott/TIGER@192.168.0.107:1521/XE

profile
학원 공부 내용 정리

0개의 댓글