본문 바로가기
개발일지

개발일지 -alter ERD-

by 태운콩즙 2024. 1. 5.
728x90
반응형

alter:테이블의 구조를 변경할 때( 컬럼이름 변경, 타입변경, 컬럼삭제, 제약조건 추가 등)

 

create table student(
 id bigint,
s_name varchar(20),
s_mobile int
);

-- 테이블의 구조 확인
desc student;
desc book;
-- 기존 컬럼에 제약조건 추가
alter table student add constraint primary key(id);
-- 기존 컬럼에 타입 변경
alter table student modify s_mobile varchar(30);
-- 컬럼 이름 변경
alter table student change s_mobile s_phone varchar(30);
-- 컬럼 삭제
alter table student drop s_major;

 

ERD(Entity Relationship Diagram, 개체 관계 모델)

  1. 테이블 간의 관계를 그림으로 표현한 것
  2. 설계 단계 에서 작성하며 누구나 ERD를 보고 테이블 생성 쿼리를 작성할 수 있음
  3. 테이블 간 의 관계
    1. 1:1 관계 (일대일)
    2. 1:N 관계 (일대다)
    3. N:1 관계 (다대일)
    4. N:M 관계 (다대다): N:1 , 1:M 으로 분리
  4. 식별 비식별 관계
    1. 식별관계
      1. 실선으로 표현
      2. 부모테이블의 pk 컬럼을 자식도 pk 컬럼으로 사용하는 관계
    2. 비식별 관계
      1. 대시선으로 표현
      2. 부모테이블의 pk컬럼을 자식 테이블에서 별도의 참조 칼럼으로 사용하는 관계

지난 시간에 만들었던 도서관리를 ERD로 만들어보면

테이블들이 어떤 것을 참조하는지 볼 수 있게 된다

 

<예제 1>

이 ERD를 보고 쿼리문을 작성해 보자

 

drop table if exists member_table;
create table member_table(
	id 				bigint auto_increment primary key,
    member_email 	varchar(30) not null unique,
    member_name 	varchar(20) not null,
    member_password varchar(20) not null
);

drop table if exists category_table;
create table category_table(
	id 				bigint auto_increment primary key,
    category_name	varchar(20) not null unique
);

drop table if exists board_table;
create table board_table(
	id 					bigint auto_increment primary key,
	board_title			varchar(50) not null,
    board_writer		varchar(30) not null,
    board_contents		varchar(500),
    board_hits			int default 0,
    board_created_at	datetime default now(),
    board_updated_at	datetime on update now(),
    board_file_attached	int default 0, -- 파일 첨부 여부(없으면 0, 있으면 1)
    member_id 			bigint,
    category_id			bigint,
    constraint fk_board foreign key(member_id) references member_table(id) on delete cascade,
    constraint fk_board_category foreign key(category_id) 
						references category_table(id) on delete set null
);

drop table if exists board_file_table;
create table board_file_table(
	id 					bigint auto_increment primary key,
	orginal_file_name	varchar(100), -- 사용자가 업로드한 파일의 이름
    stored_file_name	varchar(100), -- 관리용 파일 이름(파일이름 생성 로직은 backend에서)
    -- 증명사진.jpg  91845798217498237-증명사진.jpg
    board_id			bigint,
    constraint fk_board_file foreign key(board_id) references board_table(id) on delete cascade
);

drop table if exists comment_table;
create table comment_table(
	id 					bigint auto_increment primary key,
    comment_writer		varchar(30) not null,
    comment_contents	varchar(200) not null,
    comment_created_at  datetime default now(),
    board_id			bigint,
    member_id			bigint,
    constraint fk_comment_board foreign key(board_id) references board_table(id) on delete cascade,
    constraint fk_comment_member foreign key(member_id) references member_table(id) on delete cascade
);

drop table if exists good_table;
create table good_table(
	id 					bigint auto_increment primary key,
	comment_id			bigint,
    member_id			bigint,
    constraint fk_good_comment foreign key(comment_id) references comment_table(id) on delete cascade,
    constraint fk_good_member foreign key(member_id) references member_table(id) on delete cascade
);

 

-회원 기능-

-- 회원 기능
-- 1. 회원가입(임의의 회원3명 가입)
 drop table if exists member_join_table;
 
 create table member_join_table(
 id bigint auto_increment primary key,
 member_email varchar(50) not null unique,
 member_password varchar(30) not null,
 member_name varchar(20)
 );
 insert into member_join_table (member_email , member_password , member_name) values ('aa@aa.com' , '1234' , 'aa');
 insert into member_join_table (member_email , member_password , member_name) values ('bb@bb.com' , '1234' , 'bb');
 insert into member_join_table (member_email , member_password , member_name) values ('cc@cc.com' , '1234' , 'cc');
-- 2. 이메일 중복체크 
select member_email from member_join_table where member_email='aa@aa.com';
-- 3. 로그인
select * from member_join_table where member_email = 'aa@aa.com' and member_password = '1234';
-- 4. 전체 회원 목록 조회 
select * from member_join_table;
-- 5. 특정 회원만 조회 
select * from member_join_table where member_email = 'aa@aa.com';
select * from member_join_table where id = 1;
-- 6. 내정보 수정하기(6.1, 6.2에 해당하는 쿼리문작성)

-- 6.1 회원정보 수정화면 요청(회원정보 수정 페이지를 보여준다고 가정했을 때 필요한 쿼리) 
select * from member_join_table where id = 1;
-- 6.2 회원정보 수정 처리(비밀번호를 변경한다는 상황)
update member_join_table set member_password = '0000' where id= 1;
-- 7. 회원 삭제 또는 탈퇴 
delete from member_join_table where id =3;

 

728x90
반응형

'개발일지' 카테고리의 다른 글

db 마무리 ,Frontend 시작  (1) 2024.01.09
개발일지 -db 응용-  (2) 2024.01.08
개발일지 -참조관계 , 수정쿼리-  (1) 2024.01.05
개발일지 그룹화, 조건 적용 ,join, sub qurey, 제약 조건  (1) 2024.01.03
MySQL  (1) 2024.01.02