수업/DB

230616 (DDL 데이터정의어 테이블생성,구조변경,제거,제약조건)

보더96 2023. 6. 16. 17:30

DDL(데이터 정의어) - 객체를 생성 : CREAT, 구조변경 : ALTER, 제거 : DROP

CREAT 객체종류

ex) CREAT TABLE, CREAT VIEW, CREAT SEQUENCE

 

 prod_no        VARCHAR2(5)           xxxxx

컬럼명,                자리수,             기본값설정, 제약조건

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

1. 테이블 생성

 

CREAT TABLE product(

 prod_no VARCHAR2(5),

 prod_name VARCHAR2(20) 

);

 

 

ㅡㅡ구조확인

DESC : 데이터베이스에서 쿼리 실행할때 SQL문법을 사용하여 ORDER BY절을 작성하고

             해당열의 정렬방식을 DESC로 지정   -   내림차순

DESC : MYSQL에서 "DESCRIBE"문을 사용하여 테이블의 구조를 확인할때 사용한다.

DESC product

 

 

 

2. 테이블 구조변경  -  숫자형으로 변경

 

1) 컬럼추가

ALTER TABLE product

ADD prod_price NUMBER(1);            -- 테이블에 prod-price라는 새로운 열 추가

                                                                 가격정보저장,  1자리수

 

ALTER TABLE product

ADD a NUMBER(1);                --  숫자형으로 1자리

 

2) 컬럼이름변경 

ALTER TALBE product

RENAME COLUMN a TO abc;      -- 이름을 abc로 변경

 

3)컬럼의 자료형 또는 자릿수 변경, 기본

ALTER TABLE product

MODIFY prod_price NUMBER(6);         --  6자리

 

 

ALTER TABLE product

MODIFY prod_price DEFAULT 0;

 

 

ALTER TABLE product

MODIFY prod_name VARCHAR2(100);

 

 

4)컬럼 삭제

ALTER TABLE product

DROP COLUMN abc;             -abc 컬럼 삭제

 

5)제약조건 추가  --  (중복,NULL - PK제약조건에 위배된다)

(테이블레벨로 추가)   테이블 추가해서 제약조건 추가

ATLER TABLE product

ADD CONSTRAINTS prod_no_pk PRIMARY KEY(prod_no);

ADD CONSTRAINTS (제약조건 이름-테이블명,제약조건약자,      제약조건)

 

(컬럼 레벨로 추가)    기본 컬럼 변경해서 제약조건추가

ALTER TALBE product

MODIFY prod_name CONSTRINTS prod_name_nn NOT NULL:

 

★★제약 조건 : PRIMARY KEY, NOT NULL★★

 

NULL을 넣으려해도 오류가 나고, 중복된 제품을 넣어도 오류가 난다!

3. 테이블 제거

DROP TABLE product;        --product 테이블 제거

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

4. 무결성 제약조건

무결성제약조건을 설정하는 방법은 테이블레벨로 설정, 컬럼레벨로 설정하는 방법이 있다

그중 NOT NULL제약조건은 컬럼레벨로만 설정할 수 있다!

(1) 테이블레벨로 설정

CREATE TABLE t_a (컬럼, 디폴트, 제약조건이름, 제약종류 (참여컬럼명))

CREATE TABLE t_a(c_a number(5) default 0,

                                 c_b varchar2(10),

                                 constraint c_a_pk PRIMARY KEY(c_a),

                                constraint c_b_pk CHECK (c_b IN ( '남' , '여' ))

)

(2)컬럼레벨로 설정

CREATE TABLE t_A(컬럼 디폴트 제약조건

                                   컬럼 제약조건 )

CREATE TABLE t_A(c_a number(5) default 0 constraint c_a_pk PRIMARY KEY,

                                   c_b varchar2(10) constriant c_b_ck CHECK(c_b IN  ( '남' , '여' ))

1. NOT NULL  ㅡ  

2. UNIQUE

3. PRIMARY KEY : NOT NULL + UNIQUE

4. CHECK

5. FOREGIN KEY : 다른테이블의 PRIMARY KEY 만 참조하겠다.

ㅡㅡㅡ참조 안하면 오류가 생김!ㅡㅡ

 

 

 

DML(데이터 조작어) - 추가 : INSERT, 수정:UPDATE, 삭제:DELETE

 

1. 데이터추가 (상품추가)

INSERT INTO      TABLE명     ( DD,OO)  VALUES   (NO, NAME) 들어가면됨

 

INSERT INTO product(prod_no, prod_name) VALUES(  'C0001'   , '아메리카노'   );

INSERT INTO product(prod_no, prod_name) VALUES(  'C0002'   , '라떼'   );

INSERT INTO product(prod_no, prod_name) VALUES(  'C0003'   , '핫초코'   );

INSERT INTO product(prod_no, prod_name) VALUES(  'C0004'   , '아이스딸기아사이'   );

INSERT INTO product VALUES ( 'F0001' , '치즈케이크' , 1000);

INSERT INTO product VALUES ( 'F0002' , '치즈베이글' , NULL);    --가격미정이면 NULL

INSERT INTO product VALUES ( 'F0003' , '치킨샌드위치' , '    '  );  -- NULL값 이랑 같음

INSERT INTO product VALUES ( 'F0004' , '밀박스' );                   -- 상품가격입력 필수!!

NULL,   null,   '      '으로도 가능함!!     F4처럼 상품가격을 입력안하면 출력안됨!!

 

 

INSERT INTO product VALUES(  'C0001'   , '다른상품' , 0  );   -- 중복되지 않게 하려면 

INSERT INTO product VALUES(  '  '   , '번호없는상품1' , 0  );

INSERT INTO product VALUES(  '  '   , '번호없는상품2' , 0  );

 

 

DELETE product WHERE prod_no IS NULL;   -상품번호가 NULL인애들 삭제

DELETE product WHERE prod_name = '다른상품';  --이름이 다른상품인 애들 삭제

DELETE product WHERE prod_name IS NULL;  --삼품이름이 NULL인애들 삭제

 

 

INSERT INTO product(prod_no, prod_name) VALUES ( 'D0001' , '라임블렌디드');  --성공!

INSERT INTO product(prod_no, prod_name) VALUES ( 'D0002' , NULL );

ㅡㅡNOT NULL제약조건을 추가해야함!ㅡㅡ

 

 

 

'수업 > DB' 카테고리의 다른 글

230620 트랜잭션, 스냅샷, 커밋  (0) 2023.06.20
230619 DB, 오라클에서 ERD여는법  (0) 2023.06.19
230616 (SUBQUERTY, Scalar Subquery,SELECT 문제풀이)  (0) 2023.06.16
230615 (JOIN, UNION)  (2) 2023.06.15
230615 DB HAVING 절  (0) 2023.06.15