본문 바로가기
JAVA 수업/SQL 수업 기록

0619 수업 내용

by 예림220 2023. 6. 19.

1) 

무결성 제약조건

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

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

(1) 테이블 레벨로 설정

(2) 컬럼 레벨로 설정 

 

UPDATE product SET = , = WHERE prod_no LIKE 'D%'

상품번호가 D로 시작하는 모든 것을 찾아서 상품이름에 음료를 추가해서 기존의 이름 +음료 과 결합하고, 음료가격은 3000원으로 변경해라 

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

 

1. 고객테이블 생성 

컬럼레벨로 제약조건 설정

고객정보등

INSERT INTO customer (id, pwd, name) VALUES ('id1', 'p1', 'n1');

 

아이디 중복 등록시 (pk중복) 

INSERT INTO customer (id, pwd, name) VALUES ('id1', 'aaa', 'aaa');

오류보고

ORA-00001: unique constraint (HR.CUSTOMER_PK) violated 

: 제약조건 위배 (pk 중복) 

 

패스워드오류 (not null 값 입력x) 

INSERT INTO customer (id, pwd, name) VALUES ('id2', '', 'aaa');

오류보고 

SQL 오류: ORA-01400: cannot insert NULL into ("HR"."CUSTOMER"."PWD")
01400. 00000 -  "cannot insert NULL into (%s)"

 

--테이블용 dictionary : user_table 

--제약조건용 dictionary : user constraints   

모든 제약조건을 보여줘 

SELECT * FROM user_constraints;

테이블 이름이 커스터머인 모든 제약조건을 보여줘 

SELECT * FROM user_constraints WHERE table_name='CUSTOMER';

 

테이블레벨로 제약조건 설정 


CREATE TABLE ORDER_INFO(
order_no number,
order_id varchar2(5),
order_dt date DEFAULT sysdate,
CONSTRAINT order_info_pk PRIMARY KEY(order_no),
CONSTRAINT order_id_fk FOREIGN KEY(order_id)REFERENCES customer(id)
);

 

고객 정보 id1 존

INSERT INTO order_info(order_no, order_id) VALUES (1, 'id1');

INSERT INTO order_info(order_no, order_id) VALUES (2, 'id1');

SELECT*FROM CUSTOMER;

 

SELECT*FROM order_info;

PK 는 NULL 값 안되지만

FK 는 NULL 값 저장됨 

 

FK (ORDER ID)에 NOT NULL 제약조건 추가하기 

ALTER TABLE ORDER_INFO MODIFY order_id NOT NULL; 

 

NOT NULL제약조건 추가해서 이제 아래 코드 안됨 

 


CREATE TABLE order_line (
order_no NUMBER,
order_prod_no VARCHAR2(5), 
order_quantity NUMBER(2),
CONSTRAINT order_line_Pk PRIMARY KEY(order_no, order_prod_no), 
CONSTRAINT order_no_fk FOREIGN KEY(order_no) REFERENCES order_info(order_no), 
CONSTRAINT order_prod_no_fk FOREIGN KEY(order_prod_no)REFERENCES product(prod_no),
CONSTRAINT order_quantity_ck CHECK (order_quantity>0) 
);

 

SELECT * FROM product;

 

SELECT * FROM customer; 

SELECT *FROM order_info;

INSERT INTO order_line(order_no, order_prod_no, order_quantity) VALUES (1, 'C0001', 3);

 

INSERT INTO order_line(order_no, order_prod_no, order_quantity) VALUES (1, 'C0001', 3);
INSERT INTO order_line(order_no, order_prod_no, order_quantity) VALUES (1, 'C0002', 1);
INSERT INTO order_line(order_no, order_prod_no, order_quantity) VALUES (1, 'C0003', 2);
INSERT INTO order_line(order_no, order_prod_no, order_quantity) VALUES (2, 'C0001', 1);
SELECT * FROM order_line;

 

--에러발생 INSERT INTO order_line(order_no, order_prod_no, order_quantity) VALUES (1, 'C0001', 3);

 

--에러발생 

 

- order_quantity (not null 제약조건 없으닌 null 들어감)

DELETE order_line WHERE order_no=2 AND order_prod_no='D0001';

(방금 만든거 삭제하기 

 

order_quantity 에도 NOT NULL 조건 추가하기 

ALTER TABLE order_line
MODIFY order_quantity NOT NULL; 

이제 이거 안됨 

2) 모델링 

 

1. 주문번호 발급방법 

1) MAX 함수를 사용하기 

2) SEAUENCE 객체 생성 사용 

--id 2번 고객이 'C0001' 상품을 2개 주문한다. 

 

1) 

max함수는 행이 1건도 없을 경우에는 0이아닌 null이 반환된다. 그러기 때문에 

SELECT NVL(MAX(order_no),0)해준다. 

(SELECT NVL(MAX(order_no),0)+1 FROM order_info

 

INSERT INTO order_info(order_no, order_id, order_dt) VALUES ( 
      order_seq.NEXTVAL, 
      'id2', 
      SYSDATE);

CREATE SEQUENCE order_seq START WITH 5 INCREMENT BY 2 MAXVALUE 20 MINVALUE 1 
CYCLE NOCACHE;

 

(2) 일변번호값얻기 

SELECT order_seq.NEXTVAL FROM dual; 

실행시킬때마다 2씩 증가됨 

 

(2-3) 일련번호값 조회 (현재 일련번호값이 나옴) 

SELECT order_seq.CURRVAL FROM dual; 

 

(2-4) SEQUENCE 삭제 

DROP SEQUENCE order_seq; 


INSERT INTO order_line(order_no, order_prod_no, order_quantity) VALUES(
order_seq.CURRVAL, 'C0001', 2); 

 

SELECT * FROM product;
SELECT * FROM customer; 
SELECT *FROM order_info; 
SELECT * FROM order_line; 

 

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

 

 

JDBC 예습하세요

 

 

 

'JAVA 수업 > SQL 수업 기록' 카테고리의 다른 글

0616 수업 내용  (2) 2023.06.16
0615 공부 내용  (2) 2023.06.15
0614 수업 내용  (0) 2023.06.14
0613 수업 내용  (2) 2023.06.13
0612 수업내용  (0) 2023.06.12