[Day25] SQL 기초 & 기본 정리
[Day25] SQL 기초 & 기본 정리
SQL 기본 정리
SQL 데이터 타입
데이터 타입 | 설명 |
---|---|
varchar | 가변 길이 문자열 (최대 n 길이) |
char | 고정 길이 문자열 |
int | 정수형 데이터 |
text | 긴 문자열 데이터 |
date | 날짜 (YYYY-MM-DD) |
boolean | 참/거짓 값 |
사용자 및 권한 설정
1
2
3
4
5
6
-- 사용자 생성
CREATE USER 'ureca'@'%' IDENTIFIED BY 'ureca';
-- 모든 권한 부여
GRANT ALL PRIVILEGES ON *.* TO 'ureca'@'%' WITH GRANT OPTION;
-- 변경 사항 적용
FLUSH PRIVILEGES;
DB 생성 및 사용
1
2
3
4
5
-- 데이터베이스 생성
CREATE DATABASE ureca;
-- 데이터베이스 선택
USE ureca;
TABLE
테이블 생성
1
2
3
4
5
6
7
CREATE TABLE `ureca`.`member` (
id VARCHAR(45) NOT NULL,
pw VARCHAR(45) NOT NULL,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
PRIMARY KEY (id)
);
테이블 구조 변경
1
2
3
4
5
6
ALTER TABLE `ureca`.`member`
ADD COLUMN `id` VARCHAR(45) NOT NULL,
ADD COLUMN `pw` VARCHAR(45) NOT NULL,
CHANGE COLUMN `name` `name` VARCHAR(50) NOT NULL,
CHANGE COLUMN `age` `age` INT NOT NULL,
ADD PRIMARY KEY (`id`);
테이블 삭제
1
DROP TABLE `ureca`.`member`; -- 완전 삭제 (rollback 불가)
데이터 (CRUD)
데이터 삽입 (INSERT)
1
2
3
4
INSERT INTO member(id, pw, name, age) VALUES
('a', 'a', '홍길동', 20),
('b', 'b', '이예은', 30),
('c', 'c', '전지현', 40);
데이터 조회 (SELECT)
1
SELECT * FROM member;
데이터 변경 (UPDATE)
1
2
3
update member
set name = '이예은'
where id = 'b';
데이터 삭제 (DELETE)
1
DELETE FROM member WHERE id = 'a';
데이터 삭제 방법
1
2
DELETE FROM member; -- 데이터만 삭제 (ROLLBACK 가능)
TRUNCATE TABLE member; -- 데이터만 삭제 (ROLLBACK 불가, AUTO_INCREMENT 초기화)
트랜잭션 관리
1
2
3
4
5
select * from member;
start transaction;
delete from member;
rollback; -- 변경 사항 취소
commit; -- 변경 사항 저장
JDBC 사용법
executeQuery()
: SELECT문 실행, 결과로 ResultSet 반환executeUpdate()
: INSERT, UPDATE, DELETE 실행, 변경된 행 개수 반환execute()
: 모든 SQL 실행 가능 (SELECT이면 true, DML이면 false 반환)
JDBC를 이용한 데이터 조회 (select)
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
29
30
31
32
33
34
35
36
37
38
39
import java.sql.*;
public class Test {
public static void main(String[] args) {
// JDBC 6단계
try {
// 1.Driver 등록
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. Connection
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ureca", "ureca", "ureca");
// 3. Statement 생성
Statement stmt = con.createStatement();
// 4. SQL 전
ResultSet rs = stmt.executeQuery("select * from member");
// executeQuery : ResultSet이 return
// 5. 결과 얻기
while(rs.next()) {
String id = rs.getString("id");
String pw = rs.getString("pw");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id + " " + pw + " " + name + " " + age);
}
// 6. 자원 닫기
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
JDBC를 이용한 데이터 삽입 (insert)
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
29
30
31
32
33
34
35
36
import java.sql.*;
public class InsertTest {
public static void main(String[] args) {
// JDBC 6단계
try {
// 1.Driver 등록
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. Connection
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ureca", "ureca", "ureca");
// 3. Statement 생성
// Statement stmt = con.createStatement();
PreparedStatement stmt = con.prepareStatement("insert into member(id, pw, name, age) values(?,?,?,?)");
// 4. SQL 전
stmt.setString(1, args[0]);
stmt.setString(2, args[1]);
stmt.setString(3, args[2]);
stmt.setInt(4, Integer.parseInt(args[3]));
int i = stmt.executeUpdate();
// 5. 결과 얻기
System.out.println(i + "행이 변경되었습니다.");
// 6. 자원 닫기
stmt.close();
con.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
PAIR STUDY
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class MyWorkbench {
static Connection con;
public static void main(String[] args) throws Exception {
Frame f = new Frame();
TextArea ta = new TextArea();
Panel p = new Panel();
TextField tf = new TextField(25);
f.add(ta);
f.add(p, BorderLayout.SOUTH);
p.add(tf);
dbSet();
tf.addActionListener(e -> {
String sql = tf.getText().trim();
try {
PreparedStatement stmt = con.prepareStatement(sql);
if(sql.startsWith("select")) {
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
String id = rs.getString("id");
String pw = rs.getString("pw");
String name = rs.getString("name");
int age = rs.getInt("age");
ta.append(id + ":" + pw + ":" + name + ":" + age + "\n");
}
} else {
int i = stmt.executeUpdate();
ta.append(i + "행이 변경되었습니다." + "\n");
}
} catch (SQLException e1) {
e1.printStackTrace();
}
});
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(500, 400);
f.setVisible(true);
}
private static void dbSet() throws Exception {
// 1.Driver 등록
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. Connection
con = DriverManager.getConnection("jdbc:mysql://localhost/ureca", "ureca", "ureca");
}
}
결과
✅ 테이블의 값을 변경한 경우 (insert, delete 등)
🔹 강사님의 답안
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class MyWorkbench {
static Connection con;
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);
f.add(ta);
f.add(p, BorderLayout.SOUTH);
p.add(tf);
dbSet();
tf.addActionListener(e->{
String sql=tf.getText().trim();
try {
PreparedStatement stmt=con.prepareStatement(sql);a
if(stmt.execute()) {
ResultSetMetaData rsmd=stmt.getMetaData();
ResultSet rs=stmt.getResultSet();
int colCnt=rsmd.getColumnCount();
StringBuilder sb=new StringBuilder();
while(rs.next()) {
for (int i = 1; i <= colCnt; i++) {
sb.append(rs.getString(i)).append(" ");
}
sb.append("\n");
}
ta.append(sb.toString()+"\n");
}else {
int i=stmt.getUpdateCount();
ta.append(i+"행이 변경되었습니다\n\n");
}
tf.setText("");
} catch (SQLException e1) {
e1.printStackTrace();
}
});
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(500, 400);
f.setVisible(true);
}
private static void dbSet() throws Exception {
//1. Driver 등록
Class.forName("com.mysql.cj.jdbc.Driver");
//2. Connection
con=DriverManager.getConnection("jdbc:mysql://localhost/ureca", "ureca", "ureca");
}
}
END
This post is licensed under CC BY 4.0 by the author.