JAVA 수업/SQL 수업 기록

0619 수업 내용

예림220 2023. 6. 19. 17:00

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 예습하세요