상세 컨텐츠

본문 제목

[MySQL] 회원가입 데이터베이스 테이블 만들기 (2)

MySQL

by 주초위왕 2023. 3. 17. 03:13

본문

[MySQL] 회원가입 데이터베이스 테이블 만들기 (1)을 이어서 꼭 알아야하는 명령어를 알아보자.

하지만 테이블 만들기1 에서는 데이터 타입 명령어를 쓰면 안되므로 다른 예제로 예를 들어보자.

(mem_idx bigint auto_increment primary key이거는 적으면 안됨, 자동으로 증가 할거니까,

mem_regdate datetime default now( )요것도 자동으로 증가 할거니까 쓸 수 없다.

즉, 자동으로 안 들어가는 걸로 써도 테이블 만들기1에 데이터가 다 들어가야 하기 때문에 사용 불가)

 

-- 데이터 삽입(INSERT) 

-- 1. INSERT INTO 테이블명 VALUES (값1, 값2, 값3 ... )   # 1:20:54 부분 다시보기 이해 안감

-- 2. INSERT INTO 테이블명 테이블명 (필드명1, 필드명2, 필드명3 ... ) VALUES (값1, 값2, 값3 ... )


예시를 들어서 다른 테이블 생성

에러가 떠서 '20'을 추가, 데이터가 에러 안 나고 잘 들어간걸 볼 수 있음.

위에 만든 테이블 컬럼이 다 들어가야 에러가 안 뜸.

 

frontend에서 Refrash를 해주고 tb_test에 마우스 오른쪽을 누르면

두개의 데이터가 나오는걸 볼 수 있다. 데이터를 차례대로 넣으려면

이 방법으로 데이터를 INSERT INTO 테이블명 VALUES (값1, 값2, 값3 ... ) 하면 됨.

그래도 1씩 증가하는 데이터에는 이 명령어를 쓸 수 없음. 그럼 두번째 방법으로 써보기.

 

2. INSERT INTO 테이블명 테이블명 (필드명1, 필드명2, 필드명3 ... ) VALUES (값1, 값2, 값3 ... )

(만약 테이블 만들기1에 두번째 명령어를 쓰고 싶다면 mem_idx bigint auto_increment primary ke, mem_regdate datetime default now( ) 이두개를 제외한 나머지만 넣을 수 있음)

 

일단, 테이블2를 바탕으로 연습해보기.

age에는 default가 들어 갔으니 0이 들어간걸 확인. (age를 안 넣기로 했으니까.)

insert into tb_test (userid, userpw, name, age) VALUES ('melon', '1010', '이메론', 25); 실행

(원하는 필드에 원하는 데이터를 넣는 방법2)

실행 결과를 보았을 때 명령어를 넣을 때는 순서대로 넣었지만, 들어갈때는 순서가 없다는것.

하지만 데이터를 끄집어 낼 때는 원하는걸 가져올 수 있기 때문에 어떤 순서로 들어갈지는 상관이 없다.

만일 리스트로 뽑을 때 항상 뭐가 있어야 하면 자동으로 증가시킨 번호나, 날짜, 시간이 있어야 원하는데로 정렬이 가능함.

(데이타 베이스는 순서를 보장하지 않는다.)


이제 기존에 만든 테이블 만들기1 프로젠트에 맞기 데이터를 삽입해보기.

이제 필드에 있는걸 다 적어줄건데 앞서 mem_idx bigint auto_increment primary key이거는 적으면 안됨, 자동으로 증가 할거니까, mem_regdate datetime default now( )요것도 자동으로 증가 할거니까 안 써도됨.

 

아래 내용을 실행하면 잘 작동하는걸 볼 수 있다.  만약 한번더 실행을 하면 에러가 뜨는데 중복이 된 값이 들어갔기 때문에

걸리는 것.

insert into tb_member (mem_userid, mem_userpw, mem_name, mem_hp, mem_email,
mem_hobby, mem_ssn1, mem_ssn2, mem_zipcode, mem_address1, mem_address2, mem_address3)


values('apple', '1111', '김사과', '010-1111-1111', 'apple@apple.com','잠자기',
'001011','4018518','12345','서울 관악구','111-11','1111');
# 아이디, 패스워드번호, 이메일, 취미, 등번, zip코드, 주소, 세번째는 비워도 되니까 1111로 채움
#여기까지가 데이터를 넣음

mem_ssn1-6자리, '001011'

mem_ssn-7자리, '4018518'

mem_zipcode-5자리, '12345'

로 맞춰 놨기 때문에 아무렇게나 넣으면 데이터가 안 들어감.


연습삼아 서로 다른 데이터를 4개 추가해보기

insert into tb_member (mem_userid, mem_userpw, mem_name, mem_hp, mem_email,
mem_hobby, mem_ssn1, mem_ssn2, mem_zipcode, mem_address1, mem_address2, mem_address3)
values('banana', '1234', '반하나', '010-2222-2222', 'banana@banana.com','자전거,영화감상',
'001011','4018518','22222','서울 서초구','111-11','1111');

insert into tb_member (mem_userid, mem_userpw, mem_name, mem_hp, mem_email,
mem_hobby, mem_ssn1, mem_ssn2, mem_zipcode, mem_address1, mem_address2, mem_address3)
values('orange', '2222', '오렌지', '010-3333-3333', 'orange@orange.com','코딩,음악듣기',
'001011','4018518','3333','서울 마포구','111-11','1111');

insert into tb_member (mem_userid, mem_userpw, mem_name, mem_hp, mem_email,
mem_hobby, mem_ssn1, mem_ssn2, mem_zipcode, mem_address1, mem_address2, mem_address3)
values('melon', '3333', '이메론', '010-4444-4444', 'melon@melon.com','요가',
'001011','3018518','3333','서울 강남구','111-11','1111');

insert into tb_member (mem_userid, mem_userpw, mem_name, mem_hp, mem_email,
mem_hobby, mem_ssn1, mem_ssn2, mem_zipcode, mem_address1, mem_address2, mem_address3)
values('ryuzy', '1011', '류정원', '010-5555-5555', 'ryuzy@naver.com','코딩',
'001011','3018518','1111','서울 서초구','111-11','1111');

insert into tb_member (mem_userid, mem_userpw, mem_name, mem_hp, mem_ssn1, mem_ssn2, mem_zipcode, mem_address1, mem_address2, mem_address3)
values('melon', '5555', '이메론', '010-6666-6666', '001011','3018518','1111','서울 서초구','111-11','1111');

 

강의에서는 2번은 에러가 나서 없어졌는데 내꺼는 나와서 물어봐야 하는 부분.

원래는 1, 3, 4, 5, 6이 나와야 정상


-- 테이블 필드 추가
-- ALTER TABLE 테이블명 ADD 컬럼명 타입 제약조건
alter table tb_member add mem_point int default 0;
# 포인트 열을 추가

-- 데이터 수정(UPDATE)
-- 1. UPDATE 테이블명 SET 필드1=값1, 필드2=값2 ..
update tb_test set userpw='1234';
-- 2. UPDATE 테이블명 SET 필드1=값1, 필드2=값2 .. WHERE 조건절
update tb_test set userpw='1111' where userid = 'apple';
update tb_test set age = 30 where userid = 'orange';
update tb_member set mem_point = 1000 where mem_userid='ryuzy';
update tb_member set mem_point = mem_point + 500;

-- 데이터 삭제(DELETE)
-- 1. DELETE FROM 테이블명;
delete from tb_test;
-- 2. DELETE FROM 테이블명 WHERE 조건절;
delete from tb_member where mem_userid = 'melon';

 

-- 테이블 필드 추가
-- ALTER TABLE 테이블명 ADD 컬럼명 타입 제약조건
alter table tb_member add mem_point int default 0;
(포인트 열을 추가)

 

-- 데이터 수정(UPDATE)
-- 1. UPDATE 테이블명 SET 필드1=값1, 필드2=값2 ..   # 어떤 필드를 어떻게 바꿀 것인지 값을 써주기
update tb_test set userpw='1234';   # 이렇게 조건없이 써주면 모든 유저의 비밀번호가 통일됨 쓰면 안됨

원래는 비번이 '1234'로 통일되야 하는데 나오지 않아 이것도 물어보기

 

특정 row만 바꿔주기(특정 유저 아이디만 'apple'로 바꿔주기)
-- 2. UPDATE 테이블명 SET 필드1=값1, 필드2=값2 .. WHERE 조건절
update tb_test set userpw='1111' where userid = 'apple';

 

조건절 where을 붙여서 orange인 사람만  30으로 바꿔주기.
update tb_test set age = 30 where userid = 'orange';


이제 기존에 있는 tb_member에 사용자들의 포인트값을 바꿔보기.
update tb_member set mem_point = 1000 where mem_userid='ryuzy';   #류지라는 이름을 가진 사람의 포인트 '1000'점 주기

 

모든 사람들에게 포인트 '500'을 무조건 주기.

update tb_member set mem_point = 500;

(이거는 할 수 없음 왜냐면 이미 1000포인트가 있기 때문에, 그럼 '1000'포인트가 있는 사람을 뺏게 되는 것)


update tb_member set mem_point = mem_point + 500;

(기존에 있는 맴버 포인트에 '500'을 주는게 맞는 것)

그치만 에러가 생겨서 물어봐야함


2:04:16다시 보기

-- 데이터 삭제(DELETE)
-- 1. DELETE FROM 테이블명;
delete from tb_test;

(데이터를 한방에 날리는 명령어, 하지만 잘 사용 하지는 않음)


-- 2. DELETE FROM 테이블명 WHERE 조건절;
delete from tb_member where mem_userid = 'melon';

(특정 데이터나, 회원을 탈퇴 시키는 경우)

멜론이라는 회원이 없어짐 여기는 에러가 생기질 않아 올려봄.


-- 검색(SELECT)
-- 1. SELECT 필드명1, 필드명2 .. FROM 테이블명
SELECT mem_userid, mem_name, mem_hp FROM tb_member;
SELECT mem_hp, mem_name, mem_userid FROM tb_member;


-- 2. SELECT 필드명1, 필드명2 .. FROM 테이블명 WHERE 조건절
select mem_userid, mem_name from tb_member where mem_userid='ryuzy';

(맴버 유저 아이디가 'ryuzy'인 사람을 정보(아이디)를 보고싶다면)


-- *는 모든 컬럼(단, 속도 저하)
select * from tb_member where mem_userid='ryuzy';

(만약 이 사람의 모든걸 보고 싶다면 *를 붙여주기, 하지만 안 쓰는게 좋음 속도 저하가 생기기 때문에)


-- 산술 연산자
-- +, -, *, /, DIV(왼쪽 연산자를 오른쪽 연산자로 나눈 후 소수부분을 버림), MOD(나머지 연산)
-- 대입 연산자
-- =
-- 비교 연산자
-- =, <>(다름), <, >, <=, >=, is(왼쪽 연산자와 오른쪽 연산자가 같으면 참), 
-- is not(왼쪽 연산자와 오른쪽 연산자가 다르면 참), 
-- between A and B(값이 A보다 크거나 같고, B보다 작거나 같으면 참을 반환)
-- in() (연산자의 값이 인수로 전달받은 리스트에 존재하면 참을 반환)
-- 논리 연산자
-- and, or , xor, not
select mem_userid, mem_userpw, mem_name from tb_member where mem_idx >= 3;
select * from tb_member where mem_userid = 'melon';
select mem_idx, mem_userid from tb_member where mem_email is not null;
select mem_idx, mem_userid from tb_member where mem_email is null;
select mem_idx, mem_userid from tb_member where mem_point >= 500 and mem_point <= 1000;
select mem_idx, mem_userid from tb_member where mem_point between 500 and 1000;
select mem_idx, mem_userid from tb_member where mem_point = 0 or mem_point = 500;
select mem_idx, mem_userid from tb_member where mem_point in(0, 500);
-- 3. SELECT 필드명1, 필드명2 .. FROM 테이블명 ORDER BY 정렬할 필드 (오름차순, 내림차순)
select mem_idx, mem_userid, mem_name from tb_member order by mem_idx; -- 오름차순
select mem_idx, mem_userid, mem_name from tb_member order by mem_idx asc;
select mem_idx, mem_userid, mem_name from tb_member order by mem_idx desc;
select mem_idx, mem_userid, mem_point from tb_member order by mem_point desc, mem_idx desc;

select mem_userid, mem_userpw, mem_name from tb_member where mem_idx >= 3;

(where mem_idx(순번)가 3보다 크거나 같으면)

 

다시 데이터를 삽입하고

select * from tb_member where mem_userid = 'melon';이거를 이메일과 취미를 지워보고 select해보기

에러 안 나오고 잘 나옴.

 

 

select mem_idx, mem_userid from tb_member where mem_email is not null;

(조건절 이메일을 기입한 사람만 찾고 싶다면, 없는 사람은 안 보고싶을 때)

 

select mem_idx, mem_userid from tb_member where mem_email is null;

(이메일 없는 사람만)

 

1. select mem_idx, mem_userid from tb_member where mem_point >= 500 and mem_point <= 1000;

2. select mem_idx, mem_userid from tb_member where mem_point between 500 and 1000;

(포인트가 500이상1000이하)

 

 

select mem_idx, mem_userid from tb_member where mem_point in(0, 500);

(포인트가 0점하고 500인 사람)

 

 

1. select mem_idx, mem_userid, mem_name from tb_member order by mem_idx; 

2. select mem_idx, mem_userid, mem_name from tb_member order by mem_idx asc;

(오름차순)

 

select mem_idx, mem_userid, mem_name from tb_member order by mem_idx desc;

(내림차 순)

 

 

이차정렬

select mem_idx, mem_userid, mem_point from tb_member order by mem_point desc, mem_idx desc;

(포인트 점수를 우선으로 내림차순 정렬)

 

 

이차정렬

나중에 가입한 사람이 위로 올라가게끔(mem_idx가 위로 올라가게끔)

select mem_idx, mem_userid, mem_point from tb_member order by mem_point desc, mem_idx desc;

반응형

관련글 더보기

댓글 영역