My sql 쿼리문 작성시
① select(검색할 속성)
② from(대상 테이블)
③ [where](튜플에 대한 조건)
④ [group by](그룹 기준)
⑤ [order by](정렬할 속성) 순으로 정렬
2-3-4-5-1 순으로 실행됨
[] 생략 가능한 절 select와 from은 없으면 안되지만 나머지는 생략해도 가능하다
delete from bbs where body like '%개나리%‘;
① update bbs set body=replace(body,'개나리','사랑해');
-> 튜플속의 데이터를 완전히 변경
② select replace(body,'개나리‘,’사랑해‘) from bbs;
-> 실제로 튜플 속 내용이 바뀌진 않고 치환됐을 경우 어떻게 변경될 지 보여준다
select * from bbs; 입력 시 개나리가 아닌 사랑해로 그대로 나오는 것을 알 수 있다.
테이블 관리
생성 삭제 수정
-튜플을 관리하기 위한 구조 정의
튜플 관리
C R U D
-표현하고자 하는 데이터
테이블 명세서
문제를 보고 테이블 자체를 건드는 문제인지 테이블 안의 데이터을 수정하는 문제인지 잘 파악하고 해결하여야 한다.
ex) 이름 한글을 10글자까지 가능으로 변경
-> 테이블 자체의 내용을 수정하는 것이기 때문에 update가 아닌 alter 명령어로 수정을 진행한다.
alter table member modify name varchar(20);
unicode 사용하는 프로그램은 보통 한글 2바이트 숫자·영어는 1바이트
Key
기본키(primary key)
외래키(foreigh key)
**시나리오: 회원의 차량관리(회원당 0~3대)
테이블 2개 생성
① Member
② Car
개체: 하나의 주제에 관련있는 속성으로 표현
FK
부모 릴레이션 : member 테이블 (부모 테이블이 delete , update 될 때 자식 테이블의 데이터도 영향을 받을 수 있다.)
자식으로부터 참조를 당한다.
외래키가 참조하는 속성은 반드시 유니크해야한다( 1.unique 2. p·k 지정)
자식 릴레이션 : car 테이블 외래키 보유 (insert, update 될 때 부모 데이터가 영향을 받을 수 있다.)
수정과 삽입 동작에서 부모 릴레이션의 데이터 참조
member 테이블에서 ID aa2 튜플은 존재할 수 있지만, car 테이블에서 ID aa3 튜플은 존재할 수 없다.
create table member(
id varchar(4) primary key,
name varchar(10),
addr varchar(10),
tel varchar(10)
);
create table car(
carnum varchar(4) not null,
carinfo varchar(10),
caruser varchar(4),
foreign key(caruser)references member(id)
);
"부모 테이블이 delete , update 될 때 자식 테이블의 데이터도 영향을 받을 수 있다" 의 내용에 의거하여 실제로 적용되는지 오류를 만들어 보았다.
update member set id='5' where id='1';
delete from member where id='1';
"insert, update 될 때 부모 데이터가 영향을 받을 수 있다"의 내용에 의거하여 실제로 적용되는 오류를 만들어 보았다
insert into car values('2222','k3','5');
update car set caruser='5' where caruser='1';
**오류 내용에서 알 수 있듯이 둘은 foreign key 외래키로 연결되어있기 때문에 튜플 수정시 서로에게 어떤 영향을 미치는지 이해하고 명령하여야 한다.