SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 정의, 조작, 제어하기 위한 표준 언어이다.
MySQL은 널리 사용되는 오픈 소스 RDBMS로, SQL을 기반으로 데이터를 효율적으로 관리한다. 특히, MySQL은 다양한 운영 체제에서 사용할 수 있고, 웹 애플리케이션 개발에 최적화되어 있어 많은 개발자들이 선호하는 데이터베이스 시스템이다.
프로젝트에서 MySQL을 사용하면 데이터의 안정성과 일관성을 확보하고, 대용량 데이터도 빠르게 처리할 수 있다. 스프링 부트와 같은 프레임워크와 연동하여 개발 효율성을 높일 수도 있다.
예를 들어, 스프링 부트에서는 JPA를 통해 객체와 데이터베이스 테이블을 매핑하여 개발자가 SQL 쿼리 작성에 대한 부담을 줄이고 비즈니스 로직 구현에 집중할 수 있도록 도와준다.
또한, MySQL은 트랜잭션 기능을 제공하여 데이터의 무결성을 보장하고, 백업 및 복구 기능을 통해 데이터 손실에 대비할 수 있다.
위 그림처럼 MYSQL에서 File내부에서 필요한 명령어를 입력할 수 있고, 왼쪽의 스키마로 전체 구조를 파악할 수 있다.
기본적으로 스키마 인터페이스는 데이터베이스 구조/객체 정의 공간으로 여러 스키마 나열한다.
활용:
다음은 자주 쓰이는 SQL명령어들이다.
CREATE TABLE
: 테이블 생성ALTER TABLE
: 테이블 구조 변경 (열 추가, 수정, 삭제)DROP TABLE
: 테이블 삭제CREATE DATABASE
: 데이터베이스 생성DROP DATABASE
: 데이터베이스 삭제INSERT INTO
: 테이블에 데이터 삽입UPDATE
: 테이블 데이터 수정DELETE FROM
: 테이블 데이터 삭제SELECT
: 테이블 데이터 조회GRANT
: 사용자 권한 부여REVOKE
: 사용자 권한 회수START TRANSACTION
: 트랜잭션 시작COMMIT
: 트랜잭션 확정ROLLBACK
: 트랜잭션 취소
위 그림은 스프링부트에서 생성한 자바 프로젝트이고 외부 라이브러리로 mysql을 연동한 구조이다.
구조는 다음과 같다.
package test1;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class MyWorkbench {
static Connection con; // DB Connection 객체
public static void main(String[] args) throws Exception {
Frame f = new Frame();
TextArea ta = new TextArea();
Panel p = new Panel();
TextField tf = new TextField(35); // sql 입력 텍스트필드
Button btnS = new Button("전체 회원정보 조회");
f.setLayout(new BorderLayout());
ta.setEditable(false); // 텍스트 영역 수정 불가 설정
f.add(ta, BorderLayout.CENTER);
f.add(p, BorderLayout.SOUTH);
p.setLayout(new FlowLayout());
p.add(tf);
p.add(btnS);
dbSet(); // DB 연결 설정
// Enter 누르면 insert 되도록
tf.addActionListener(e -> {
String input = tf.getText();
String[] parts = input.trim().replaceAll("\\s+", " ").split(" ");
if (parts.length == 2) {
try {
String sql = "INSERT INTO member(name, age) VALUES(?, ?)";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, parts[0]);
stmt.setInt(2, Integer.parseInt(parts[1]));
int rowsAffected = stmt.executeUpdate();
ta.append(rowsAffected + " 회원 정보가 추가되었습니다.\n\n");
stmt.close();
} catch (SQLException ex) {
ex.printStackTrace();
ta.setText("입력 오류: " + ex.getMessage());
} catch (NumberFormatException ex){
ta.setText("나이는 숫자로 입력해야합니다.\n");
}
} else {
ta.append("잘못 입력함\n");
}
});
// 전체 회원 조회 버튼 클릭 시 실행
btnS.addActionListener(e -> {
try {
String sql = "SELECT name, age FROM member";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ta.setText("회원 목록:\n");
while (rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
ta.append("이름: " + name + ", 나이: " + age + "\n");
}
rs.close();
stmt.close();
} catch (SQLException ex) {
ex.printStackTrace();
ta.setText("SQL 실행 오류: " + ex.getMessage());
}
});
// 창 닫기 = 프로그램 종료
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
try {
if (con != null && !con.isClosed()) {
con.close(); // DB 연결 종료
}
} catch (SQLException ex) {
ex.printStackTrace();
}
System.exit(0); // 프로그램 종료
}
});
f.setSize(500, 400);
f.setVisible(true);
}
// DB 연결 설정
private static void dbSet() throws Exception {
// 1. JDBC Driver 등록
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. Connection (DB연결)
con = DriverManager.getConnection("jdbc:mysql://localhost/ureca", "ureca", "ureca");
}
}
주요 기능:
java.sql
패키지 사용DriverManager.getConnection()
: DB 연결 설정member
테이블)INSERT INTO
)SELECT
)PreparedStatement
사용SQLException
, NumberFormatException
처리코드 구성:
dbSet()
메소드:Class.forName()
)main()
메소드: