티스토리 뷰

SQL: Structured Query Language

데이터베이스 관리 시스템 접속하기

명령 프롬프트: mysql –uroot -p

Path 추가해야 어디서나 쓸 수 있다

데이터베이스 생성하기

create database db이름;

참고) sql 사용법

  • 명령어는 여러 줄로 나눠 쓸 수 있다.
  • 명령어의 끝은 ;로 끝난다.
  • 한 줄에 여러 명령어를 쓸 수 있다. ;로 끊어 주기만 하면 된다.
  • 키워드는 대소문자를 구분하지 않는다.
  • \c를 입력하면 쿼리 입력을 취소할 수 있다.
  • Ctrl+C로도 가능하다.

데이터베이스 사용자 생성과 권한 주기

해당 데이터베이스를 사용하는 사용자 생성, 권한 부여하기

사용자 생성

create user '유저명'@localhost identified by '비밀번호';

https://dev.mysql.com/doc/refman/8.0/en/create-database.html

 

MySQL :: MySQL 8.0 Reference Manual :: 13.1.12 CREATE DATABASE Statement

13.1.12 CREATE DATABASE Statement CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ... create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name | DEFAULT ENCRYPTION [=] {'Y' | 'N'} CREAT

dev.mysql.com

권한 부여

grant all privileges on 'db이름'.* to '유저명'@'localhost';
flush previleges;

localhost에서 접속하는(@) 유저 '유저명'에게 데이터베이스 'db이름'에 대한 모든 권한(*)을 부여한다.

https://dev.mysql.com/doc/refman/8.0/en/grant.html

 

MySQL :: MySQL 8.0 Reference Manual :: 13.7.1.6 GRANT Statement

13.7.1.6 GRANT Statement GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user_or_role [, user_or_role] ... [WITH GRANT OPTION] [AS user [WITH ROLE DEFAULT | NONE | ALL | ALL EXCEPT role [, role ] ... | role

dev.mysql.com

생성한 계정으로 데이터베이스에 접속하기

mysql –h호스트명 –udb계정명 –p 데이터베이스이름

띄어쓰기 유의하기. 각 옵션에 대한 인자는 붙여서 쓴다.

데이터베이스 이름은 -p에 대한 인자가 아니므로 띄어서 쓴다.

세미콜론을 붙이지 않는다.

 

참고: 다음과 같은 에러가 뜬 경우,

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql -hlocalhost -unewuser -p newdb' at line 1

이미 sql에 root 계정으로 접속한 상태에서 또 새로운 계정으로 접속을 하려니까 생기는 에러다.

quit또는 exit를 입력하여 root계정 접속을 해제한다. 시크하게 Bye 한마디만 한다.

quit

명령 프롬프트로 나와 다시 입력하면 잘 된다.

데이터베이스 확인하기, 사용하기, 전환하기

존재하는 데이터베이스 확인하기

show databasese;

데이터베이스 사용, 전환하기

use db이름;

현재 데이터베이스에 존재하는 테이블 목록 확인하기

use db이름으로 데이터베이스 선택한 후

show tables;

테이블 구조 확인하기

desc 테이블명;

or

describe 테이블명;

 

DML: Data Manipulation Language

  • SELECT – 검색
  • INSERT - 등록
  • UPDATE - 수정
  • DELETE - 삭제

SELECT

select [distinct] 컬럼명 [[as] 별명] [, 컬럼명 [[as] 별명]] from 테이블명 [where 조건식] [order by 컬럼명 [asc/desc]]

컬럼명, 별명 등을 ''로 감싸는 것은 옵션, 그러나 공백이 포함되어 있다면 감싸야 함.

order by 컬럼명까지만 쓰면 기본값은 asc(오름차순)

조건식에서 사용 가능한 표현: 컬럼명, 상수, 연산자

연산자 종류

  • 산술연산자
  • 비교연산자
  • 논리연산자
  • in (min, max)
  • like '문자열'; (와일드카드 % = 0개 이상의 문자, _ = 1개의 문자)

함수

Oracle과 다르게 MySQL에서는 from 데이터베이스 없이도 테스트할 수 있다.

예) SELECT LOWER('SEoul')

  • ucase/upper('문자열'), lcase/lower('문자열');
  • substring(startindex,number) //인덱스가 1부터 시작
  • lpad/rpad('문자열',padded_length,'채우기 문자')
  • trim/ltrim/rtrim('문자열')
  • abs(x)
  • mod(n,m)

그룹함수

출처: https://www.edwith.org/boostcourse-web/lecture/16721/

group by 컬럼명 절과 함께 사용할 수 있다.

INSERT

일부 필드의 값만 갖는 레코드 추가 (지정하지 않은 필드는 default값으로 할당됨)

insert into 테이블명(필드n, 필드m, ...) values (필드n의 값, 필드m의 값, ...);

모든 필드의 값을 갖는 레코드 추가

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

UPDATE

update 테이블명 set 필드n = 필드n의 값, ... where 조건식

DELETE

delete from 테이블명 where 조건식

 

 

 

DDL: Data Definition Language

MySQL 데이터 타입

http://blog.naver.com/PostView.nhn?blogId=islove8587&logNo=221036036689&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=true&from=search

 

[MYSQL] 데이터 타입(DataType)

1. 데이터 타입​- M은 정수 타입의 최대 출력 폭을 나타낸다. 부동 소수점 및 고정 소수점 타입의 경우...

blog.naver.com

문자형

  • CHAR[(M)]: 고정 길이 문자열, 무조건 M자 만큼의 기억장소 차지
  • VARCHAR[(M)]: 가변 길이 문자열, 실제 문자열의 길이만큼 기억장소 차지
  • TEXT
  • ENUM
  • SET
  • 숫자형
  • INT/INTEGER[(M)]: 4바이트 정수형 (signed/unsigned)
  • FLOAT[(M,D)]
  • DOUBLE([M,D)]
  • DECIMAL/DEC/NUMERIC/FIXED[(M[,D])]: 묶음 고정 소수점 숫자. M은 전체 자릿수, D는 소수점 뒷자리수
    ex) DECIMAL(5,2): -999.99~999.99

날짜형

  • DATE: YYYY-MM-DD
  • TIME: HH:MM:SS
  • DATETIME: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP
  • YEAR

이진

  • BINARY
  • BLOB

테이블 생성

create table 테이블명 (
    필드명1 타입 [NULL | NOT NULL] [DEFAULT] [AUTO_INCREMENT],
    필드명1 타입 [NULL | NOT NULL] [DEFAULT] [AUTO_INCREMENT],
    ...
    PRIMARY KEY(필드명)
);

테이블 수정

컬럼 추가

alter table 테이블명
    add 필드명 타입 [NULL | NOT NULL] [DEFAULT] [AUTO_INCREMENT];

컬럼 삭제

alter table 테이블명
    drop 필드명;

컬럼 수정(컬럼 재정의)

alter table 테이블명
    change 필드명 새필드명 타입 [NULL | NOT NULL] [DEFAULT] [AUTO_INCREMENT];

테이블 삭제

drop table 테이블명;

제약 조건이 있을 경우 삭제 불가능하다.

 

생각해보기

  1. 칼럼의 길이가 10인데, 해당 칼럼에 값이 저장되어 있습니다.  이 때 칼럼의 길이를 5로 바꾼다면 어떤 일이 벌어질까요?
  2. 문자열을 저장하는 데이터 타입인 CHAR와 VARCHAR 차이점에 대해 알아보고 어떤 상황에서 CHAR 또는 VARCHAR 를 선택하는 것이 효율적인지 생각해봅시다.
  3. 문자열 데이터 타입에는 문자셋을 지정할 수 있습니다. 문자셋에 따라 해당 필드가 차지하는 공간 크기를 한번 계산해보자. (예: VARCHAR(10) CHARACTER SET UTF8; 은 몇 Byte 크기를 차지할까요? ASCII 일때는 또 몇 Byte 크기를 가질까요?

1. 데이터가 손실되면 에러를 띄우며 취소됨. 손실되지 않는 범위에서는 줄이는 게 가능

mysql> alter table role
    -> change description description varchar(3);
ERROR 1406 (22001): Data too long for column 'description' at row 1
mysql> alter table role
    -> change description description varchar(99);
Query OK, 4 rows affected (0.13 sec)
Records: 4  Duplicates: 0  Warnings: 0

2. 고정 길이에서는 CHAR, 일반적인 상황에서는 VARCHAR. VARCHAR은 문자열 길이만큼만 저장 공간을 차지하기 때문에 인자를 최대값으로 두어도 상관없다.

3. 댓글에 누가 훌륭한 글을 달아 두었다. 문자 인코딩의 역사. 한번 읽어보자.

http://www.rcy.co.kr/xeb/study/2900

 

Study :: 배움터 - [MYSQL & ORACLE] CHAR & VARCHAR2의 한글 BYTE 이야기

이 글을 쓰게 된 계기는 MYSQL 4.1버젼의 한 테이블의 한 필드에서 링크URL을 담는 필드가 있었다. 이 필드는 최대인 VARCHAR(250)을 할당 받고 있었다. 사용자가 입력할 때 너무 많이 입력을 하여 해당 크기를 넘어 섰을 경우 250byte 만큼 딱 끝어서 저장되었고 INSERT문의 쿼리는 실행되는데 오류가 없었다. 하지만 사용자페이지에선 250byte가 넘어선 url 값이 제대로 그 사이트에 이동할리 없었다. 이점을 해결하기 위해 입력창에

www.rcy.co.kr

정리하면

  • ASCII: 7비트 문자 인코딩. 앞에 0을 붙여 8비트(1바이트)로 사용. 첫비트 1로 시작하는 나머지 128자는 정의해 두지 않음
  • EUC-KR: ASCII 코드 + 한글. ASCII 범위는 1바이트, 한글과 한자는 2바이트 사용
  • Unicode: 2바이트 문자 인코딩(65536자). 
  • UTF-8: Unicode 인코딩. ASCII 코드 범위에 있는 문자를 저장하는 데는 1바이트만 사용. 한글과 한자 등은 3바이트 사용. 대부분의 웹페이지에서 사용.

참고자료:

http://www.ciokorea.com/print/35385

 

데이터베이스의 언어··· SQL이란 무엇인가

오늘날 구조화 쿼리 언어(Structured Query Language)는 비록 제품들 간에 자사 고유의 확장 기능을 가지고 있기는 하지만, 관계형 데이터베이스에서 데이터를 조작하고 쿼리하는 표준 수단이다. SQL의 편의성과 보편성은 하둡(Hadoop)을 위시한 수 많은 NoSQL 또는 비관계형 데이터 저장(Non-Relational Data Stores) 기술도 SQL의 일부를 도입하거나 SQL과 유사한 쿼리 언어를 만들어 낼 정도이다.

www.ciokorea.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함