MySQL

SQL CRUD ( Create Read Update Delete )

96__혀누 2024. 3. 26. 16:51

CRUD ( Create Read Update Delete )


C ( Create )

데이터 삽입하기

1. insert into 테이블명 values (값1, 값2, 값3 ...)

전체 필드에 넣을 때, ( 필드랑 데이터 갯수가 일치해야함 )( 모자란 자리는 null값을 넣을 수 있음 )( 데이터 갯수를 맞춰야 하기 때문에, 기본값이 배정되게 할 수 없음 )

# 예제를 위해 테이블 만들기

create table words(
    eng varchar(50) primary key,
    kor varchar(50) not null,
    lev int default 1  - default = 기본값 , 해당 데이터에 입력이 없을 시, 기본값으로 자동으로 입력한다.
);

decs words;
insert into words values ('apple', '사과', 1);
-- insert into words values ('apple', '사과', 1);  # 중복 데이터 삽입 에러
-- insert into words values ('banana', '바나나');  # 컬럼 갯수가 일치하지 않음
insert into words values ('banana', '바나나', null);   # null이 들어감
-- insert into words values ('oreange', null, null);  # 뜻에 null을 넣을 수 없음 - not null

 

2. insert into 테이블명 (필드명1, 필드명2 ..) values (값1, 값2, ...)

특정 필드에 삽입할 때

insert into words (eng, kor, lev) values ('orange', '오렌지', 1); 
insert into words (eng, kor) values ('melon', '메론');  # lev이 비어져있어, 기본값인 1이 들어간다.
insert into words (lev, eng, kor) values (2, 'avocado', '아보카도');  # 필드명을 지정해서 순서와 상관없이, 데이터를 입력할 수 있다.
-- insert into words (eng) values ('cherry');  # 뜻이 not null 이기 때문에, null을 넣을 수 없음

데이터가 추가되었다.

 

예제 ) member 테이블에 5명의 데이터 삽입

 

이전글 데이터베이스 MySQL의 member 테이블 참조

insert into member(userid, userpw, name, hp, email, gender, ssn1, ssn2) values
('apple', '1111', '김사과', '010-1111-1111', 'apple@apple.com', '여자', '001011', '4015111');
insert into member(userid, userpw, name, hp, email, gender, ssn1, ssn2) values
('banana', '2222', '반하나', '010-2222-2222', 'banana@banana.com', '여자', '001011', '2015111');
insert into member(userid, userpw, name, hp, email, gender, ssn1, ssn2) values
('orange', '3333', '오렌지', '010-3333-3333', 'orange@orange.com', '남자', '001011', '3015111');
insert into member(userid, userpw, name, hp, email, gender, ssn1, ssn2) values
('melon', '4444', '이메론', '010-4444-4444', 'melon@melon.com', '남자', '001011', '3015111');
insert into member(userid, userpw, name, hp, email, gender, ssn1, ssn2) values
('avocado', '5555', '안가도', '010-5555-5555', 'avocado@avocado.com', '남자', '001011', '1015111');

member 테이블에 데이터가 추가되었다

 


U ( Update )

데이터 수정하기

1. update 테이블명 set 필드명1=값1, 필드명2=값2 .. ;

update words set eng='Rucy';

# 실행 시 에러가 발생함 : safe 모드가 걸려있음
-- Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. 
To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

-> 위 문법으로 실행 시, words 테이블의 eng 필드가 모두 'Rucy'로 바뀌게 되는데, MySQL에서는 데이터를 모두 수정하는 일은 실수일 시, 매우 큰 리스크가 존재하기에, 기본적으로 safe 모드가 발동하여, 해당 실행을 막는다

# safe모드 해제하는 법
-- 1. 일시적인 safe 모드를 해제 : set sql_safe_updates=0;
-- 2. 영구적인 safe 모드를 해제 : Edit -> Preferences -> SQL Editer -> Safe Update 체크해제 -> workbench 재시작
# 모든 lev를 1로 바꾸기
update words set lev=1;

 

모든 lev가 1로 변경되었다

# 모든 유저에게 50 포인트를 더해주기
update member set point = point + 50;

# 데이터가 int 형일 시, int 연산이 가능하다.

member 테이블의 point가 모두 50이 더해졌다

 

2. update 테이블명 set 필드명1=값1, 필드명2=값2 ... where 조건절;

# eng 'avocad'o의 lev를 2로 수정하기
update words set lev=2 where eng='avocado';

# 다중 수정이 가능하다.
#  eng 'orange'의 kor를 '어륀지' lev를 2로 바꾸기
update words set kor='어륀지', lev=2 where eng='orange';

 

words의 데이터가 수정되었다

# 예제 ) member 테이블의 데이터 수정하기
-- member 테이블의 아이디가 'apple'인 회원에 대해 우편번호는 '12345', 주소1은 '서울시 서초구',
-- 주소2는 '양재동', 주소3은 'XX아파트 101동' 으로 수정하기

update member set zipcode='12345', address1='서울시 서초구', address2='양재동', address3='XX아파트 101동' where userid='apple';

member테이블의 'apple'의 데이터가 수정되었다


D ( Delete )

데이터 삭제하기

1. delete from 테이블명;

 

2. delete from 테이블명 where 조건절; 

delete from words;    
# 오타로 인해, 없는 데이터를 삭제하려 할 경우, 에러는 발생하지 않지만, 데이터의 변화는 없다.

# 예제 ) member 테이블의 'avocado' 데이터 삭제하기
delete from member where userid='avocado';

member 테이블의 'avocado' 데이터가 삭제되었다.


R (Read )

데이터 검색하기

select 필드명1, 필드명2, ... from 테이블명

select 필드명1, 필드명2, ... from 테이블명 where 조건절;

# 예제를 위해, word 테이블에 데이터 추가하기

insert into words values ('apple', '사과', 1);
insert into words values ('banana', '바나나', null);  - null 값으로 추가된다
insert into words (eng, kor, lev) values ('orange', '오렌지', 1); 
insert into words (eng, kor) values ('melon', '메론');  - 기본값이 설정되어있다면, 따로 지정하지 않을 시, 설정된 기본값으로 설정된다.
insert into words (lev, eng, kor) values (2, 'avocado', '아보카도'); - 순서와 관계없이 추가된다.
# 데이터 검색하기
-- 지정한 필드만 출력된다.
select eng, kor from words;
select eng from words;
select kor, eng from words;
# 해당 데이터가 테이블에 없어도, 그냥 출력되어 보여준다.
select 100;
select 100 + 50 ;

select 100 + 50; 실행결과

as 필드명을 지정할 수 있다.
# 해당 출력결과의 필드명을 '덧셈'으로 바꾸기
select 100 + 50 as '덧셈';  # 작은따옴표 안에 이름을 입력하는 것이 원칙이다.
select 100 + 50 as 덧셈;  # 따옴표가 없어도 정상적으로 지정되긴 한다.
# 별명에 띄어쓰기가 포함될 경우, 에러가 발생한다.

# 여러 필드명을 한 번에 지정할 수 있다.
select eng as '영단어', kor as '뜻', lev as '수준' from words;

words의 필드명이 지정한 대로 바뀌어 출력

 

※현재 실행되고 있는 DB의 데이터를 select할 경우, DB가 멈출 수 있아, 실무에서는 서비스되고 있는 DB를 건들지 않는게 좋다.

# 모든 값 출력시 '*' 를 사용한다. 
select * from words; # 모든 컬럼을 가져오기

# 같은 결과 값 : select eng, kor, lev from words; - 되도록이면 * 을 사용해서 모든 컬럼을 불러들이지 않는다.

데이터 읽기 참고

select null; # null값이 출력, 데이터가 없음, insert가 되지 않은 것
select '';  # 공백이 출력, 해당 셀에 '' 데이터가 삽입된 것
select 100 + null; # 결과 : null, 연산할 수 없음
select 100 + '';  # 결과 : 100, 연산할 수 있음

 

'MySQL' 카테고리의 다른 글

Join  (0) 2024.03.26
데이터의 정규화  (0) 2024.03.26
SQL 정렬과 그룹  (0) 2024.03.26
SQL 연산자  (0) 2024.03.26
데이터베이스 MySQL  (0) 2024.03.25