DML
데이터 수정
update 테이블명 set 컬럼명=값, 컬럼명=값, ... where 조건식;
ex1.
1번 회원의 이름을 운영자 로 변경
pdate testmember set name='운영자', id='admin' where no = 1;
ex2.
14년도에 가입한 회원들에게 마일리지를 10000씩 추가 제공
update testmember set money = money + 10000 where joindate like '14%';
데이터 삭제
delete 테이블명 where 조건식;
테이블의 제약조건
: 쓰레기 데이터의 유입을 방지하기 위한 조건들
내가 원하는 데이터를 받아들이기 위한 조건
무결성을 위한 조건
종류
1. not null : NULL값을 허용하지 않는 조건
2. unique : 중복된 값을 허용하지 않는 조건
3. primary key(기본키) : not null + unique
4. check : 조건에 맞는 값만 허용하는 조건 ex. 아이디, 비밀번호 생성
5. default : 데이터를 넣지 않았을 때 자동으로 defautl값을 설정하는 조건
6. foreign key(외래키) : 참조키
값을 참조하고 있는 테이블의 primary key 내에 데이터가 존재해야 하는 조건
적용방법
컬럼명 컬럼타입 constraint 제약조건명 제약조건
제약조건명은 구분하기 쉽게 하기 위해서 테이블명 뒤에 _를 붙이고 약어를 적게 된다
not null
: NULL 값을 허용하지 않는 조건
not null 조건은 테이블에 적용 시 check 조건으로 변환되어 사용된다
check 컬럼명 !=null
create table test1 (
no number constraint test1_nn not null,
name varchar2(20)
);
insert into test1 values(1, '김민준'');
insert into test1 (name) values ('조은혜');
unique
: 중복된 값을 허용하지 않는 조건
create table test3(
no number constraint test3_un unique,
name varchar2(20)
);
insert into test3 values(1, '김민준'');
// 중복된 데이터를 넣으면 문제 발생
insert into test3 (name) values ('조은혜');
// null값 허용
-> NULL값이 아닌 데이터들에 한해 중복을 허용하지 않는 조건
create table test4(
no number unique,
name varchar2(20)
);
insert into test4 values(1,'김민준');
// 제약조건 명을 정하지 않으면 자동으로 제약조건명을 정하는데 에러 시 확인하기 어려움
create table Test5(
no number constraint test5_un unique not null,
name varchar2(20)
);
insert into test5 values(1, '김땡땡');
insert into test5 (name) values ('조모씨');
primary key(기본키)
: not null + unique
테이블을 대표할수 있는 데이터가 있는 컬럼
테이블당 하나만 설정가능하다...
primary key가 설정되면 자동으로 고유 인덱스(UNIQUE INDEX)가 자동으로 생성된다
create table test6(
no number constraint test6_pk primary key,
name varchar2(20)
);
insert into test6 values(1,'김민준');
제약조건 추가
primary key를 추가할 때 unique가 설정된 필드는 삭제 후 추가해주어야 한다
그냥 추가하면 에러가 발생해 unique제약조건 삭제 후 추가 필요
alter table 테이블명 add constraint 제약조건명 제약조건(필드명 타입)
alter table 테이블명 add (필드명 타입);
alter table test5 drop unique (no);
alter table test5 add constraint test5_pk primary key (no);
제약조건 삭제
alter table 테이블명 drop 제약조건(필드명);
제약조건들이 저장되어 있는 테이블
select * from user_constraints;
check
: 조건에 맞는 값만 허용하는 조건
create table test7(
no number constraint test7_pk primary key,
name varchar2(20) not null,
gender varchar2(20) constraint test7_ck check(gender in ('남자','여자'))
);
insert into test7 values(1,'김민준','남자');
insert into test7 values(2,'송지아','여자');
insert into test7 values(3,'김민준','남'); // 조건에 맞지 않는 데이터이기 때문에 error
insert into test7(no,name) values(3,'김민준'); // NULL조건이 아니기때문에 데이터가 입력이 된다
ex.
no - primary key
name - check - 이름이 세글자만 입력이 가능하도록
gender - check - 남자 여자
create table test8(
no number constraint test8_pk primary key,
name varchar2(20) constraint test8_name_ck check(length(trim(name)) = 3) not null,
gender varchar2(20) constraint test8_gender_ck check(gender in ('남자','여자'))
);
insert into test8 values(1,'김민준','남자');
insert into test8 values(2,' 송지아','여자');
insert into test8 values(3,'김민준','남자'); //조건에 맞지 않는 데이터이기 때문에 error
insert into test8(no,name) values(3,'김민준'); //NULL조건이 아니기때문에 데이터가 입력이 된다
default
: 데이터를 넣지 않으면 자동으로 디폴트 값으로 설정하는 조건
create table test9(
no number constraint test7_pk primary key,
name varchar2(20) not null,
gender varchar2(20) constraint test9_ck check(gender in ('남자','여자')),
money number constraint test9_df default 0 //따로 이름을 설정하지 않는다
);
create table test9(
no number constraint test9_pk primary key,
name varchar2(20) not null,
gender varchar2(20) constraint test9_ck check(gender in ('남자','여자')),
money number default 0
);
insert into test9 values(1,'김민준','남자',1000);
insert into test9 values(2,'송지아','여자',null);--null을 입력했기 때문에 null값이 입력된다....
insert into test9(no,name,gender) values(3,'김민준','남자');
insert into test9 values(4,'김민준','남자',0);
// 데이터를 입력하지 않으면 디폴트값이 설정된다
foreign key(외래키) : 참조키
: 값을 참조하고 있는 테이블의 primary key내에 데이터가 존재해야 하는 조건
primary key를 포함하는 테이블은 부모테이블
foreign key를 포함하는 테이블은 자식테이블
형식
constraint 제약조건명 제약조건(컬럼명) references 참조테이블명(컬럼명)
부모테이블은 반드시 먼저 만들어져 있어야 한다
부모테이블에 참조되는 컬럼에 존재하는 값만 입력이 가능하다
기본적으로 부모테이블은 마음대로 삭제되지 않는다 cascade
참조할 때 참조하는 컬럼의 데이터타입은 반드시 일치되어야 한다
create table test10 (
nu number,
bt varchar2(10),
height number,
constraint testfk10_fk foreign key(no)
);
insert into testfk10 values (1,)
관계를 맺은 테이블 삭제
cascade를 통해 삭제해야만 한다
drop table 테이블명 cascade constraints;
create table test11(
no number constraint test11_pk primary key,
name varchar2(20) not null,
gender varchar2(20) constraint test11_ck check(gender in ('남자','여자')),
money number default 0 not null
);
insert into test11 values(1,'김민준','남자',1000);
insert into test11 values(2,'송지아','여자',null); //null을 입력했기 때문에 null조건때문에 입력 불가
insert into test11(no,name,gender) values(3,'김민준','남자');
insert into test11 values(4,'김민준','남자',0);
// null 조건이더라도 디폴트값을 설정하면 데이터를 넣지 않아도 입력이 가능해진다
create table testfk11(
no number,
bt varchar2(10),
height number,
constraint testfk11_fk foreign key(no) references test11(no) on delete cascade
);
insert into testfk11 values(1,'O형',177.4);
insert into testfk11 values(10,'O형',177.4);
on delete cascade : 참조되는 부모테이블의 행에 대한 delete를 허용한다
단, 부모테이블의 행이 지워지면 자식테이블의 행도 같이 지워진다
on delete set null : 참조되는 부모테이블의 행에 대한 delete를 허용한다
단, 부모테이블의 행이 지워지면 자식테이블은 null값으로 설정
'DB > DBMS & SQL' 카테고리의 다른 글
DBMS SQL Oracle Database JOIN문 조인 (0) | 2023.03.10 |
---|---|
DBMS SQL Oracle Database SubQuery(서브쿼리) (0) | 2023.03.10 |
DBMS SQL Oracle Database 연산자 (0) | 2023.03.10 |
DBMS SQL Oracle Database 오라클 내장함수 (0) | 2023.03.09 |
DBMS SQL Oracle Database CRUD - DML 데이터 조건 검색 (0) | 2023.03.08 |