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 |