728x90
SMALL
- 계정생성
- 계정비밀번호 변경
ALTER USER test01 IDENTIFIED BY 4321;
- 권한관리
사용자가 데이터베이스에서 행할 수 있는 것들을 의미한다.
큰 분류로 분류하면 다음과 같다.
- 사용자 관리
- 접속 관리
- 테이블 관리
- 인덱스 관리
- 롤 관리
- 그 외
권한을 부여하기 위한 문장은 다음과 같다.
GRANT 권한(혹은 롤) TO 사용자_이름;
권한을 회수하기 위한 문장은 다음과 같다.
REVOKE 권한(혹은 롤) FROM 사용자_이름
CONNECT랑 RESOURCE만 있으면 계정생성가능
- 제약조건
CREATE TABLE account_info (
id NUMBER PRIMARY KEY,
email VARCHAR2(128)NOT NULL
);
INSERT INTO account_info(id, email) VALUES(123, 'abc@gmail.com');
INSERT INTO account_info(id, email) VALUES(124, 'abc@gmail.com');
INSERT INTO account_info(id, email) VALUES(125, NULL);
1 행 이(가) 삽입되었습니다.
명령의 7 행에서 시작하는 중 오류 발생 -
INSERT INTO account_info(id, email) VALUES(123, 'abc@gmail.com')
오류 보고 -
ORA-00001: unique constraint (TEST01.SYS_C007071) violated
1 행 이(가) 삽입되었습니다.
명령의 8 행에서 시작하는 중 오류 발생 -
INSERT INTO account_info(id, email) VALUES(125, NULL)
오류 보고 -
ORA-01400: cannot insert NULL into ("TEST01"."ACCOUNT_INFO"."EMAIL")
PRIMARY KEY는 같은값x
not null은 null값만 안되고 같은값입력 가능
- 제약조건 테이블에 넣기 not null은 nn이라고 함
DROP TABLE account_info;
CREATE TABLE account_info (
id NUMBER PRIMARY KEY,
email VARCHAR2(128) CONSTRAINT account_info_nn NOT NULL
);
-- 칼럼 레벨 제약조건
CREATE TABLE 테이블_이름(
칼럼이름 데이터_타입 CONSTRAINT 제약조건_이름 NOT NULL
);
이렇게 써도됨, null값이라 입력안됨
UPDATE account_info SET email = NULL WHERE id = 1;
- 제약조건확인하기 (테이블별)
SELECT * FROM ALL_CONSTRAINTS WHERE TABLE_NAME = 'ACCOUNT_INFO';
- UNIQUE : 중복제한 (null은 들어감)
- 명시적으로 걸어주기 unique는 uq라고함
email VARCHAR2(128) CONSTRAINT account_info_uq UNIQUE
- 테이블레벨 맨 아래에서 지정 쉽게 인지가능(제약조건 동시에 걸때)
CREATE TABLE account_info (
id NUMBER PRIMARY KEY,
email VARCHAR2(128) NOT NULL,
CONSTRAINT account_info_uq UNIQUE(email)
);
(형식)
-- 테이블 레벨 제약조건
CREATE TABLE 테이블_이름(
칼럼이름 데이터_타입,
...,
CONSTRAINT 제약조건_이름 PRIMARY KEY (칼럼이름)
- PRIMARY KEY 는 pk라고 함(unique랑 not null 둘다 포함)
id NUMBER CONSTRAINT account_info_pk PRIMARY KEY,
- account_info의 id값을 참조하고싶을때
CREATE TABLE account_authentication (
id NUMBER PRIMARY KEY,
password VARCHAR(128) NOT NULL,
account_info_id NUMBER REFERENCES account_info(id)
);
- 참조하는 부모테이블의 값이 없을때
명령의 22 행에서 시작하는 중 오류 발생 -
INSERT INTO account_authentication(id, password, account_info_id)
VALUES (1,'1234', 124)
오류 보고 -
ORA-02291: integrity constraint (TEST01.SYS_C007092) violated - parent key not found
- 참조할때 조건쓰기1
CREATE TABLE account_authentication (
id NUMBER PRIMARY KEY,
password VARCHAR(128) NOT NULL,
account_info_id NUMBER CONSTRAINT account_info_fk
REFERENCES account_info(id)
);
- 2
CREATE TABLE account_authentication (
id NUMBER PRIMARY KEY,
password VARCHAR(128) NOT NULL,
account_info_id NUMBER ,
CONSTRAINT account_info_fk FOREIGN KEY(account_info_id) REFERENCES account_info(id)
);
- ON DELETE CASCADE 참조하고있는 값들도 삭제
CREATE TABLE account_authentication (
id NUMBER PRIMARY KEY,
password VARCHAR(128) NOT NULL,
account_info_id NUMBER REFERENCES account_info(id)
ON DELETE CASCADE
);
- check 조건식
CREATE TABLE account_authentication (
id NUMBER PRIMARY KEY,
password VARCHAR(128) NOT NULL,
account_info_id NUMBER REFERENCES account_info(id)
ON DELETE SET NULL,
CONSTRAINT password_length_chk CHECK (length(password) >3)
);
CONSTRAINT password_length_chk CHECK (length(password) >3)
INSERT INTO account_authentication(id, password,account_info_id) VALUES(1,'1234', 123); 는 되지만
INSERT INTO account_authentication(id, password,account_info_id) VALUES(1,'123', 123); 은 안됨
제약조건을 걸어놨기 때문
삭제할때는 자식테이블부터 삭제해야 삭제가능
- 제약조건 업데이트할때 위반발생 밑에같은 경우 abcd를 abc로 하려고하니까 중복되서 x
CREATE TABLE account_info (
id NUMBER,
email VARCHAR2(128) UNIQUE
);
SELECT * FROM account_info;
INSERT INTO account_info(id, email) VALUES (1, 'abc@gmail.com');
INSERT INTO account_info(id, email) VALUES (2, 'abcd@gmail.com');
UPDATE account_info SET email = 'abc@gmail.com' WHERE id = 2;
ALTER
728x90
LIST
'DB > Oracle' 카테고리의 다른 글
20201026_22 문제 및 해결1 (0) | 2020.10.26 |
---|---|
20201026_22 제약조건 (0) | 2020.10.26 |
20201024_21 Review (0) | 2020.10.23 |
20201023_21 group by (0) | 2020.10.23 |
테스트용 scott 스크립트 (0) | 2020.10.23 |
댓글