SQL(Structured Query Language)
- SQL은 데이터를 보다 쉽게 검색하고 추가, 삭제, 수정 같은 조작을 할 수 있도록 고안된 컴퓨터 언어이다.
- 관계형 데이터베이스에서 데이터를 조작하고 쿼리하는 표준 수단이다.
- DML(Data Manipulation language) : 데이터를 조작하기 위해 사용한다.
- INSERT, UPDATE, DELETE, SELECT 등이 여기에 해당된다.
- DDL(Data Definition Language) : 데이터베이스의 스키마를 정의하거나 조작하기 위해 사용한다.
- CREATE, DROP, ALTER 등이 여기에 해당된다.
- DCL(Data Control Language) : 데이터를 제어하는 언어이다. 권한을 관리하고, 데이터의 보안, 무결성 등을 정의한다.
- GRANT, REVOKE 등이 여기에 해당된다.
database 생성하기
- 콘솔에서
mysql-uroot -p
명령을 내린다. mysql 관리자 계정인 root로 데이터베이스 관리 시스템이 접속하겠다는 것이다.
- 윈도우라면 이후 암호를 입력한다.
- 관리자계정으로 mysql에 접속했다면
mysql> create database DB이름;
으로 데이터베이스를 생성한다.
mysql-uroot -p에서 발생한 에러 해결
- 나는 위의 명령을 입력했더니 에러가 발생했다. 그 이유는 저렇게 입력하면 기본 포트번호 3306으로 명령으로 가는데, 난 3307에 할당했기 때문이다.
- 이전에 생활코딩에서 설치한 bitnami에 포함된 wampmysql이 포트3306을 차지해서 다음 포트로 할당했었다.
- 그래서 bitnami 삭제, 재부팅 후 mysql installer에서 포트를 3306으로 바꿔준 후 실행했더니 정상적으로 작동했다.
database 사용자 생성과 권한 주기
- database를 생성했다면, 해당 데이터베이스를 사용하는 계정을 생성해줘야한다.
- 또한, 해당 계정이 데이터베이스를 이용할 수 있는 권한을 줘야한다.
- 아래와 같은 명령으로 사용자 생성과 권한 부여가 가능하다.
- 5.7버전
grant all privileges on db이름.* to 계정이름@'%' identified by '암호’;
grant all privileges on db이름.* to 계정이름@'localhost' identified by '암호’;
flush privileges;
- 8.0버전
create user '계정이름'@'localhost' identified by '암호';
create user '계정이름'@'%' identified by '암호';
grant all privileges on connectdb.* to 'connectuser'@'localhost';
grant all privileges on connectdb.* to 'connectuser'@'%';
flush privileges;
- db이름 뒤의 *는 모든 권한을 의미한다.
- @'%'는 어떤 클라이언크에서든 접근 가능하다는 의미이고, @'localhost'는 해당 컴퓨터에서만 접근 가능하다는 의미이다.
- flush priviledges는 dbms에게 적용을 하라는 의미이다.
생성한 database에 접속하기
mysql –h호스트명 –uDB계정명 –p 데이터베이스이름
로 데이터베이스에 접근할 수 있다. 내 컴퓨터라면 호스트명은 127.0.0.1을 입력한다.
mysql 연결 끊기
- 프롬프트에서 quit 혹은 exit를 입력한다.
mysql 버전과 현재 날짜 구하기
SELECT VERSION(), CURRENT_DATE;
로 가능하다.
- sql은 ;로 끝난다.
- sql은 쿼리라고 읽느낟.
- 쿼리는 DBMS에게 명령을 내릴때 사용하는 문장이라고 생각하면 쉽다.
- SELECT는 어떤 내용을 조회할 때 사용하는 키워드이다.
- mysql은 쿼리에 해당하는 결과의 전체 row를 출력하고 마지막에 전체 row 수와 쿼리실행에 걸린 시간을 표시한다.
추가 내용
- 키워드는 대소문자를 구별하지 않는다.
- 쿼리를 이용해서 계산식을 구할 수 있다.
- 여러 문장을 세미콜론으로 구분하여 한줄에 입력할 수 있다.
- 하나의 sql은 여러 줄로 입력 가능하다. 중간에 취소하려면 \c를 입력한다.
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
show databases
로 dbms에 존재하는 데이터베이스를 확인할 수 있다.
use db명
로 사용중인 데이터베이스를 전환할 수 있다.
테이블
- 엑셀의 표와 유사한 형태를 가지고 있다.
- 엑셀과 다른 점은 데이터베이스를 생성해도 테이블은 존재하지 않는다. 테이블을 사용하려면 테이블을 생성하는 SQL을 사용해야 한다.
- 테이블에 값을 저장하려면 저장하기 위한 SQL을 사용해야한다.
구성요소
- 테이블 : RDBMS(Relational DMBS)의 기본적 저장구조 한 개 이상의 colunm과 0개 이상의 row로 구성한다.
- 열(column) : 테이블 상에서의 단일 종류의 데이터를 나타낸다. 특정 데이터 타입 및 크기를 가지고 있다.
- 행(row) : column들의 값의 조합. 레코드라고 불린다. 기본키(PK)에 의해 구분된다. 기본키는 중복을 허용하지 않으며 없어서는 안된다.
- field : row와 column의 교차점으로, field는 데이터를 포함할 수 있고 없을 때는 NULL 값을 가지고 있다.
현재 데이터베이스에 존재하는 테이블 목록 확인하기
mysql> show tables
- 프롬프트에서 mysql에 접속한 후 위의 명령어를 입력하면 테이블이 출력된다. 없을 경우 Empty set이 출력된다.
태이블 생성과 저장
- sql 파일이 있다면 해당 파일이 있는 폴더로 가서 프롬프트에
mysql -u유저명 -p db명 < examples.sql
를 입력한다.
- 그 후 mysql에 접속하여 show tables를 입력하면 테이블 목록이 출력된다.
테이블 구조를 확인하기 위한 DESCRIBE 명령
- table 구조를 확인하기 위해 해당 명령을 사용할 수 있다.
- 테이블 목록 중 하나를 desc 뒤에 같이 입력하면 해당 테이블의 구조가 출력된다.