[RDBMS/Mysql] 명령어 종류와 CRUD 총정리

Nanotube·2022년 8월 3일
0

Database

목록 보기
3/4
post-custom-banner

데이터베이스의 명령어

관계형 DB를 다루다보면, 알면서도 자주 까먹어 맨날 찾아보는 명령어들입니다. 남의 페이지 찾아 검색하기 귀찮아서 그냥 작성해놓고 즐찾해놓을려고 합니다.

글을 읽어보면 코드블럭에, IF NOT EXISTS 라는 선택적 명령어가 들어갑니다.

IF NOT EXISTS이란?
동일한 DB, 테이블 혹은 데이터가 없는 경우에만 생성 추가 삭제 기능을 수행하도록 해주는 옵션입니
다.

DML, 데이터 조작어

DML은, 생성된 테이블의 데이터를 가지고 놀때 씁니다. 데이터를 삽입, 수정, 삭제, 조회 등을 DML에 속합니다.

SELECT

HTTP에서 GET처럼, 데이터를 조회할때 사용하는 명령어입니다.

  • 기본
--테이블내의 모든 내용 조회
SELECT * FROM table_name;

--특정 컬럼 조회
SELECT column_name1, column_name2, column_name3, FROM table_name;

--중복 제외 조회
SELECT DISTINCT column_name1, column_name2 FROM table_name;
  • 정렬 (ORDER BY)
--오름차순
SELECT * FROM table_name ORDER BY column_name; //ASC는 기본값

--내림차순
SELECT * FROM table_name ORDER BY column_name DESC;
  • 조건 (WHERE)
--조건1(숫자)
SELECT column_name FROM table_name WHERE age >= 27;

--조건2-1(문자 포함, '%시작', '%중간%', '끝%')
SELECT column_name FROM table_name WHERE comments LIKE '%문자열%';

--조건2-2(아무 문자, '%시작', '대충 아무 한 글자, '%')
 - 언더바('_')는 아무 문자를 의미한다. 
 - 이름이 김김이고 성은 상관없을 때 조건
SELECT column_name FROM table_name WHERE name LIKE '_김김';

--조건2-3(반대일때, NOT LIKE)
SELECT column_name FROM table_name WHERE name NOT LIKE '_김김';
  • 개수(COUNT)
--전체 행 개수 조회
SELECT COUNT(*) FROM table_name;

--중복내용 제외 하고 카운트
SELECT COUNT (DISTINCT column_name) FROM table_name;
  • 그룹(GROUP)
--컬럼 그룹화
SELECT column_name FROM table_name GROUP BY column_name;

--조건 후 그룹화
SELECT column_name FROM table_name WHERE age = 27 GROUP BY column_name;

--그룹화 후 조건
SELECT column_name FROM table_name GROUP BY column_name HAVING age >= 40;
  • 널 체크(Null)
--NULL 찾기
SELECT column_name FROM table_name WHERE column_name IS NULL;

SELECT column_name FROM table_name WHERE column_name <=> NULL;

--NOT NULL 찾기
SELECT column_name FROM table_name WHERE column_name IS NOT NULL;
  • 특정 개수 COLUMN(LIMIT)
-- 상위 n개 출력
SELECT column_name FROM table_name WHERE column_name LIMIT n;

-- n~m사이 출력
SELECT column_name FROM table_name WHERE column_name LIMIT n,m;

DATEJOIN은 좀 복잡하니 나중에 다루겠습니다. 최대한 한페이지에 다루고싶지만 계속하다가는 남은머리 다빠질듯 싶습니다.

INSERT

HTTP에서 POST처럼, 필드 규격에 맞는 데이터를 삽입할 때 쓰입니다.

-- 기본 
INSERT INTO table_name (column_name1, column_name2, column_name3) VALUE (number_data, 'string_data', DATE);

-- 컬럼명 생략
INSERT INTO table_name VALUE (number_data, 'string_data', DATE);

UPDATE

HTTP에서 PUT, PATCH처럼 저장된 데이터를 수정하는 명령어입니다.

-- 조건 수정_1
UPDATE table_name SET column_name1 = value, column_name2 = value2 WHERE column_name < 27

-- 조건 수정_2
UPDATE table_name SET column_name1 = value, column_name2 = value2 WHERE column_name = data

-- 전체수정
UPDATE table_name SET column_name1 = 00000;

DELETE

HTTP에서 DELETE처럼 저장된 데이터를 삭제하는 명령어입니다. 즉, 테이블 자체는 상관없이 테이블 내의 존재하는 특정 혹은 모든 데이터를 지워버립니다.

-- 조건 삭제1
DELETE FROM table_name WHERE address;

-- 조건 삭제2
DELETE FROM table_name WHERE email='%@naver.com';

-- 모두 삭제
DELETE FROM table_name;

DDL, 데이터 정의어

데이터베이스나 테이블을 생성하거나 수정 삭제 등을 수행하는 명령어들의 집합입니다.

CREATE

  1. DB 생성
// 데이터베이스 생성 명령어
CREATE DATABASE IF NOT EXISTS db_name;

// 데이터베이스 셍상 및 속성 설정 명령어
CREATE DATABASE IF NOT EXISTS db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  1. 테이블 생성
CREATE TABLE IF NOT EXISTS table_name (
  table_fild_name Options...
)


CREATE TABLE IF NOT EXISTS table_name (
  id int auto_increment,
  new_id int 
  name varchar(30) not null
  is_completed boolean not null default false,
  primary key(id, new_id),
  foreign key (new_id) 
	references new_tables (new_id) 
	ON UPDATE [ RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT] ON UPDATE [  RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT ]
)

컬럼 Option
auto_increment: 자동으로 증분하는 숫자형 속성을 부여
primary key: 고유한 기본키로 지정
foreign key: 참조하는 외래키로 지정
check: 특정 값만 소유하도록 지정
default: 기본 값 지정
unique: 유니크 키 속성을 부여, pk와 비슷하며, 중복값X
not null: null 값을 가질 수 없음

SHOW

  1. DB 목록 조회
--DB보기
SHOW DATABASES;

--특정 DB보기
SHOW DATABASES LIKE '% 또는 _ 제목' 
  1. 테이블 목록 조회
--모든 테이블 조회
SHOW TABLES;

--테이블 구조 확인
DESC table_name;

--테이블 생성 쿼리 보기
SHOW CREATE TABLE table_name;

-- 컬럼 보기
SHOW COLUMNS FROM table_name

USE

데이터베이스를 선택할 때 쓰입니다.

USE database_name

ALTER

  1. DB 수정
ALTER DATABASE db_name CHRACTER SET = euckr;
ALTER DATABASE db_name CHARACTER SET = euckr COLLATE = euckr_korean_ci;
  1. 테이블 수정
--테이블 명 변경
ALTER TABLE table_name rename new_table_name;

--컬럼 추가
ALTER TABLE table_name add column title varchar(20) not null;

--컬럼 수정
ALTER TABLE table_name modify title char(64) null; 

--컬럼 삭제
ALTER TABLE table_name drop title; 

--컬럼 이름 변경
ALTER TABLE table_name change title subject varchar(100); 

--제약 조건 추가
 -(유니크)
ALTER TABLE table_name ADD CONSTRAINT const_name unique key (column_name1, colum_name2)
 -(기본키)
ALTER TABLE table_name ADD CONSTRAINT const_name primary key (column_name1, colum_name2)
 -(외래키): 외래키 지정 시 지정된 컬럼에 index key가 함께 선언됨.
ALTER TABLE table_name ADD CONSTRAINT const_name foreign key (column_name) REFERENCES new_table (column_name) 

-- 제약조건 삭제
 -(외래키 제외)
ALTER TABLE table_name DROP CONSTRAINT const_name

 -(외래키)
ALTER TABLE table_name DROP foreign key const_name

DROP

데이터베이스나 테이블을 삭제할 떄 쓰입니다.

  1. DB 삭제
DROP DATABSE IF EXISTS db_name
  1. 테이블 삭제
DROP DATABSE table_name

RENAME

테이블 명을 변경합니다. ALTER 같은 경우 하나의 테이블명만 변경이 가능하지만, RENAME은 다수의 테이블명을 수정할 수 있습니다.

--단일
RENAME TABLE old_table TO new_table;

--다수
RENAME TABLE old_table1 TO new_table1,
			 old_table2 TO new_table2,
             old_table3 TO new_table3;

--다른 DB로 테이블 이동
RENAME TABLE prev_db.table_name TO next_db.table_name;

TRUNCATE

지정된 테이블의 모든 내용을 지울 때 사용합니다. 최대한 사용하지 않을것을 권장합니다.

TRUNCATE TABLE table_name;

DCL, 데이터 제어어

데이터의 보안, 무결성, 회복, 병행 등을 정의하는데 사용합니다. 즉 데이터베이스의 사용 권환 관리와 트랜잭션을 관리하는(TCL) 일부 명령어를 가지고있습니다

DCL, DATA CONTROL LANGUAGE
GRANT, REVOKE, COMMIT, ROLLBACK

ACCOUNTS

GRANT

REVOKE

ref: DDL,DML-SELECT1,DML_SELECT2 DML-INSERT,MYSQL W3

profile
나노튜브
post-custom-banner

0개의 댓글