DB/SQL

[SQL] 행 입력, 수정, 삭제 CRUD

journey-dev 2023. 5. 30. 15:48

DB , Table 생성하기

데이터베이스 개체 : 테이블 인덱스, 뷰, 스토어 프로시저

- 개체 생성시 : create <개체종류> <개체이름> ~~

- 개체 삭제시 :drop <개체종류> <개체이름>

 

✔️ DB 생성, 테이블 생성

DROP DATABASE IF EXISTS market_db; -- 만약 market_db가 존재하면 우선 삭제한다.
CREATE DATABASE market_db; -- market_db라는 데이터베이스 생성

USE market_db; -- db명 더블클릭 한 것과 같음.

 

✔️ 테이블 생성

CREATE TABLE member -- member 테이블 생성
( mem_id  	CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
  mem_name    	VARCHAR(10) NOT NULL, -- 이름
  mem_number    INT NOT NULL,  -- 인원수
  addr	  		CHAR(2) NOT NULL, -- 지역(경기,서울,경남 식으로 2글자만입력)
  height    	SMALLINT,  -- 평균 키
  debut_date	DATE  -- 데뷔 일자
);

PRIMARY KEY

: pk를 설정하면 NOT NULL과 UNIQUE 특징을 갖게된다. 때문에 null값 허용x, 중복값 허용x

 

 

✔️ 자동으로 증가하는 pk

자동 증가하는 값 설정시는 꼭 pk로 설정해줘야 함

 

- MySQL : AUTO_INCREMENT

CREATE TABLE toy (
    toy_id INT AUTO_INCREMENT PRIMARY KEY,
    toy_name CHAR(4),
    age INT
)

- PostgreSQL : SERIAL

CREATE TABLE toy (
	toy_id SERIAL PRIMARY KEY,
    toy_name CHAR(4),
    age INT
)

 

※ MySQL에서 이미 만들어져 있는 테이블에 자동 증가(auto-increment) 설정 추가하는 법

ALTER TABLE boards MODIFY id INT AUTO_INCREMENT; -- 테이블 수정
desc boards; -- 테이블 정보 출력해봄

행 입력, 수정, 삭제

  1. INSERT : 테이블 행 입력
  2. UPDATE : 테이블 행 정보 수정
  3. DELETE " 테이블 행 삭제

 

✅ INSERT 

[기본형태]

INSERT INTO 테이블명(컬럼1, 컬럼2, 컬럼3) VALUES (값1, 값2, 값3);
INSERT INTO 테이블명 VALUES (값1, 값2, 값3); -- 컬럼명 생략 형태

 

[여러 값을 한번에 입력하기]

INSERT into toy3 VALUES(null,'가비',1),(null,'나비',1),(null,'바비',1);

 

[auth increment에 값 설정하기]

-- MYSQL : toy_id는 자동증가(AUTO_INCREMENT)
insert into toy(toy_id,toy_name,age) values(null,'양이', 6); -- null값, 자동으로 숫자 증가
insert into toy values(null, '강쥐', 3); -- 컬럼명 생략 가능
insert into toy(toy_name,age) values('양이', 6);
-- PostgreSQL : toy_id은 자동증가(SERIAL)
insert into toy(toy_id,toy_name,age) values(DEFAULT,'강쥐', 3); -- DEFAULT값, 자동으로 숫자 증가
insert into toy( toy_name,age) values( '양이', 2);
insert into toy( toy_name,age) values('대럼쥐', 5);

 

[자동증가되는 숫자의 다음값을 갑자기 100부터 시작하도록 변경하는 법]

ALTER TABLE toy AUTO_INCREMENT=100;  
insert into toy values(null,'루피',1);
-- ALTER TABLE toy : toy테이블로 변경하라,
-- AUTO_INCREMENT=100 : 100부터 숫자 증가

 

[처음부터 auto_increment값을 1000으로 시작, 3단위로 숫자 증가 하는 법]

 create table toy3(
 	toy_id INT AUTO_INCREMENT PRIMARY KEY, -- id는 자동증가
    toy_name CHAR(4),
    age INT
 );
 ALTER TABLE toy3 AUTO_INCREMENT=1000; -- 자동증가 숫자는 1000부터 시작
 SET @@auto_increment_increment=3; -- 자동증가 숫자는 3씩 증가

- @@auto_increment_increment : mysql의 시스템 변수 (내장되있는 글로벌 변수와 같은 것임.)

 

[다른 테이블의 데이터를 한번에 가져오기] INSERT INTO ~ SELECT ~

: 원본 테이블과 복사 하려는 테이블의 "열 개수"가 같아야 됨.

 

-  전체 열을 가져올 떄

INSERT INTO <TABLE_COPY>
SELECT * FROM <TABLE_ORIGIN>

-  특정 열을 가져올 떄

INSERT INTO <TABLE_COPY>
(컬럼명1, 컬럼명2, 컬럼명3)
SELECT 컬럼명1, 컬럼명2, 컬럼명3
FROM <TABLE_ORIGIN>

(예제) market.db에 있는 buy 테이블에 mem_id, prod_name값을 buy_copy에 복사

CREATE TABLE buy_copy (
	mem_id char(8) ,
    prod_name char(6)
)
 

INSERT INTO buy_copy
SELECT mem_id, prod_name from market_db.buy

 

 

 UPDATE

[기본형태]

UPDATE 테이블명 
SET 컬럼명1 = 변경값1, 컬럼명2 = 변경값2 
WHERE 컬럼명3 = 조건값;

 

[where문이 있는 UPDATE문] : 조건 충족시 컬럼 값 수정

UPDATE toy
SET age = 9999, toy_name="어른토이"
where age = 6
-- age가 6인 행의 age와 toy_name값이 변경됨.

 

[where문이 는 UPDATE문] : 모든 행이 다 변경됨. 

 UPDATE toy
 SET age = 9999, toy_name="어른토이"
 -- 모든 행의 age가 9999로, toy_name는 "어른토이"로 모두 변경됨.

 

 

 DELETE

[기본형태]

 DELETE FROM 테이블명 WHERE 컬럼명 = 조건값;
 DELETE from toy where toy_name like "어른%"
 -- toy_name에 "어른"이 들어간 행만 삭제

 

[DELETE, TRUNCATE, DROP 차이점]

- DELETE : 테이블은 남아있고 모든 행이 삭제됨. where문 조건 사용 가능

 

- TRUNCATE

: 테이블은 남아있고 모든 행이 삭제됨. where문 조건 사용 불가(무조건 모든 행 삭제됨)

: delete보다 속도가 더 빠름.

 

- DROP : 테이블 자체를 삭제함