Purple Bobblehead Bunny

Database

[MySQL] 데이터베이스 생성, 연결

준영어린이 2022. 3. 15. 19:14

 

시작하기 전 확인

 

모든 명령은 관리 사용자(새 데이터베이스를 만드는 데 필요한 최소 권한은 CREATE 또는 루트 계정으로 실행된다.

MySQL 셸에 엑세스하려면 다음 명령을 입력하고 메세지가 표시되면 MySQL 루트 사용자 암호를 입력한다.

mysql -u root -p

MySQL 루트 사용자의 암호를 설정하지 않은 경우 -p 옵션을 생략할 수 있다.

 

MySQL 데이터베이스 생성

 


새 MySQL 데이터베이스 생성은 단일 명령을 실행하는 것 만큼 간단하다.

새 MySQL 데이터베이스를 생성하려면 다음 명령을 실행한다. 

여기서 database_name은 생성할 데이터베이스의 이름이다.

CREATE DATABASE database_name;

# Query OK, 1 row affected (0.00 sec)

만들려는 이름과, 이름이 같은 데이터베이스가 있는 경우 오류를 방지하려면 IF NOT EXISTS문 사용

CREATE DATABASE IF NOT EXISTS database_name;

# Query OK, 1 row affected (0.00 sec)

위 출력에서 쿼리 확인은 쿼리가 성공했음을 의미하고, 경고 1개는 데이터베이스가 이미 존재하고 새 데이터베이스가

생성되지 않았음을 나타낸다.

 

 

Line 1 : 같은 이름의 DB가 있으므로 삭제

Line 2 : 이름이 같은 데이터베이스가 있는 경우 오류 방지 

Line 5 : book_db를 사용

Line 7~12 : book_db안에 books이름의 테이블을 생성 후 

                book_id, title, publisher 와 같은 칼럼들 생성

                VARCHAR() : 문자

                book_id를 주요 키로 설정

 

 

생성한 데이터베이스를 보려면 MySQL 셸 내에서 다음 명령을 실행한다.

SHOW DATABASES;

위 명령은 서버에 있는 모든 데이터베이스 목록을 인쇄한다.

 

MySQL 데이터베이스 선택

 

데이터베이스를 작성할 때 새 데이터베이스는 사용할 수 있도록 선택되지 않는다.

MySQL 세션을 시작하기 전에 데이터베이스를 선택하려면 다음 문을 사용한다.

USE database_name;

# Database changed

데이터베이스를 선택하면 선택한 데이터베이스에서 테이블 작성과 같은 모든 후속 작업이 수행된다.

데이터베이스에서 작업할 때 마다 USE문을 사용하여 선택해야 한다.

 

다음 명령 끝에 데이터베이스 이름을 추가하여 MySQL 서버에 연결할 때 데이터베이스를 선택할 수도 있다.

mysql -u root -p database_name

 

레코드 추가하기

INSERT INTO database_name (컬럼1, 컬럼2, ...) values(값1, 값2, ...)

 

레코드 검색/수정/삭제 하기 

SELECT column_name FROM database_name [WHERE 조건] [ORDER BY 정렬방식]

ex) price가 50000원 이상인 책의 이름을 가져오고 싶을 때

SELECT title FROM books WHERE price > 50000;

ex) 출판사(publisher)가 Oreilly인 경우 가격을 찾고싶을 때

SELECT price FROM books WHERE publisher LIKE 'Oreilly'

UPDATE table_name SET column_name = 새로운 값, ... , [WHERE 조건];
DELETE FROM table_name [WHERE 조건];

 

 

JDBC를 이용한 데이터베이스 사용 절차

 

1. URL로 지정된 JDBC 드라이버를 적재한다
   Class.forName("com.mysql.cj.jdbc.Driver");

2. 데이터베이스 연결
   DriverManager.getConnection(url, user, pw);

3. SQL 문장 작성 및 전송
   Statement stmt = con.createStatement();
   ResultSet rs = stmt.executeQuery("SELECT * FROM books");

4. 결과 집합 사용 후 연결 해제
    while(rs.next()) {
           int number = rs.getInt("book_id");
           String name = rs.getString("title");
}

JDBC로 데이터베이스에 연결하기

위 그림에서 MySQL로 book_db를 만들었다.

 

SQL 문장 실행

Connection, Statement, ResultSet 인터페이스를 사용하여 SQL 문장 실행

Statement s = con.createStatement();
String select = "SELECT * FROM books ORDER BY book_id";
ResultSet rows = s.executeQuery(select)

 

 

결과 집합에서 이동과 처리

• executeQuery 메소드에 의해 반환된 ResultSet 객체에 쿼리 결과 레코드가 모두 저장되어 있다.

• 커서를 사용하여 결과 집합에서 리코드를 하나씩 처리

• 결과 집합(ResultSets) : 쿼리의 조건을 만족하는 레코드들의 집합

• 커서(cursor) : 결과 집합의 레코드들을 포함하고 있는 파일에 대한 포인터. 현재 접근되고 있는 레코드

• 커서 객체는 previous(), first(), last(), absolute(), relative(), beforeFirst(), afterLast() 등과 같은 이동 메소드를 가짐

• SQL에서는 index 번호가 1부터 시작.

 

커서 이동 예시)

while( rows.next() ) {
       //현재 레코드 처리
       int id = rs.getInt("book_id")

 

결과 집합 예시) --> 1-컬럼명으로, 2- index번호로

int id = row.getInt("id");
String name = row.getString("name");

int id = row.getInt(1);
String name = row.getString(2);

 

검색결과 출력하기

데이터베이스에서 책을 전부 검색하여 콘솔에 출력

 

 

데이터베이스 수정하기

 

테이블을 보면 추가가 되었는 것을 볼 수 있었다...