hyuko

데이터 베이스 실습과 mysql 본문

SQL

데이터 베이스 실습과 mysql

hyuko12 2023. 4. 25. 20:21
728x90
반응형

데이터베이스 MySQL의 이용

데이터 베이스의 이용

우리가 데이터베이스를 사용할 때 쓰는 것은
C,R,U,D 일명 크루드 라고 불리는 것들이다.

  • C : create
  • R : read
  • U : update
  • D : delete

각각 create 는 insert into 데이터 추가
read 는 select from 데이터 조회
update 는 update set 데이터 수정
delete 는 delete from 데이터 삭제


INSERT 문

INSERT INTO `student_mst` 
	(`student_id`, `student_name`, `mentor_id`)
VALUES (0, '손오공', 3);

위의 코드는 값을 넣겠다!
어디에? student_mst라는 테이블에
그 밑의 괄호는 괄호안에 내가 원하는 컬럼명을 적고 그 컬럼명 순서대로 값을 넣겠다는 의미이다.
VALUES는 값을 의미한다 .

  • 여러개를 insert 할 때 쓰는 방법
insert into `student_mst`
	(`student_id`, `student_name`, `mentor_id`)
values
	(	7, 			'베지터',			1),
    (	8, 			'손오천',			2),
    (	9, 			'트랭크스',			3),
    (	10, 		'피콜로',			1),
    

UPDATE 문

UPDATE `student_mst`
set
	`student_name` = '프리저',
    `mentor_id` = 2
where
	`student_id` = 3;

코드 해석을 하자면 그렇다.
업데이트 즉 수정을 할 것인데 학생의 이름을 프리저로 바꾸고 멘토의 아이디를 2로 바꾸겠다.
하겠다는 것이다 . 하지만 여기서 where의 조건으로 들어가서 학생의 아이디번호가 3번인
학생을 그렇게 바꾸라는 뜻이 된다.


DELETE 문

delete from
	student_mst
where
	student_id = 4;

delete 문은 삭제를 하는 것이다. delete from 이 한번에 세트이다
이 것을 해석하면 삭제를 할 것이다 어디서 할거냐 학생 테이블에서 할 것이다.
그럼 어떤 걸 삭제할거냐 학생의 아이디값이 4번인 학생을 마지막으로 실행되는 것이
delete 예약어이다.


마무리하면서

기본적인 insert , update, delete 에대해 배워봤다.
아주 간단하게 배운 것이라 활용이나 delete의 경우 무작정 삭제하는 것이아니라
따로 빼놓는 것도 있어야 할 것이고 어떤 식으로 삭제를 하는지 추가를 하는지
업데이트를 하는지를 배운 것이다 하지만 오늘 분명 sql crud 중 read는 하지 않았는데
select 의 경우에는 join 이라던지 서브 쿼리라던지 개념들이 더 방대하기에 따로 빼서
정리하도록 하겠습니다!

 

 

앞서 우리는

insert, delete, update 에대해 배웠다.

하지만 우리가 저장을 하고 수정을 하는 행위 이 외에 가장 중요한 것은
어떤 데이터를 어떻게 찾아오고 선택할 것이냐이다. 이 기능을 해주는 것이 sql에서
select 이다. 아래에서 기본적인 형태부터 보자

select * from table;
  • 기본 형태는 위와 같이 select * from table;해석하자면 선택하겠다. 어디서? table에서 하겠다.
    select 선택한다 * = 전체를 from 어디에서 table 명에서

그렇다면 table에서 전체를 선택하는 것은 알겠다!
우리가 원하는 것은 전체가 아니다. 원하는 정보를 때에 맞춰서 이것 저것
바꿔서 들고 오고 싶을 것이다.

java 에서는 조건을 주기 위해서 if 문을 쓴다.
sql 에서는 table 뒤에 where 조건절을 붙여 사용한다.

select * from table where id = '1';

여기서 where 뒤에는 조건이 온다. id가 1인 것 즉 ! 해석을 해보자면
찾는다 테이블에서 그런데 어디에서 찾느냐 id가 1인 것에서 찾겠다.
라고 해석이 가능하다.

그 후에 select 뒤의 값들을 전체로 두지 않고 우리가 원하는 값만 얻고싶으면
직접 명시를 해주게 되면 그 것만 받아올 수 있다.


Select 문의 활용

  • 앞서 우리가 select 는 선택 조회 등의 기능을 담고 있다고 했다.
  • 그리고 select 는 조건이 붙는다고 하였다 이 조건을 활용하는 방법에
    left outer join 이 있다.
select
	*
from
	user_mst um
        left outer join role_dtl rd on(rd.user_id = um.user_id)
        left outer join role_mst rm on(rm.role_id = rd.role_id)
    

해석을 하자면 그렇다. 왼쪽의 바깥에서 붙이겠다. 어디 왼쪽이냐?
즉 left outer join 의 왼쪽인 user_mst 에서 붙이겠다
role_dtl 을 붙이는데 조건은 이러하다 role_dtl의 user_id와
user_mst 의 user_id의 값이 같은 것 들끼리 붙이겠다.
밑의 조건도 그러한 개념으로 이해한다!


Join

  • inner join 은 교집합의 개념이다.
    : 모두 가지고 있는 애들을 조회한다.

두개의 비교하는 테이블에 비교하는 컬럼의 값이
두 곳 모두 들고 있어야 가능하다.

  • Outer join은 합집합의 개념이다
    • LEFT OUTER JOIN은 a 와 b라는 테이블이 있을 때
      a가 기준 테이블이고 b테이블이 붙여지는 테이블인 것이고
      이때 a의 정보는 전부 가지고오면서 b와 a의 공통적인
      부분을 a에 붙이겠다는 의미이다.
    • 이때 a에는 있지만 공통된 부분의 b에 a와 같은 값이
      없을 경우 null을 넣어서 반환된다.
    • a에서 b를 뺀 유일한 a값은 left outer join 후에
      where 조건절에서 b의 키값이 null이면 기준으로 잡아주면 된다.
  • Self join
    : 자기 자신의 테이블을 다시 더해주는 느낌 서브쿼리와 같이 쓰는편이다.

java 에서의 sql 예시

public class UserInsert {
	
	public int saveUser(User user) {
		int successCount = 0;
		DBConnectionMgr pool = DBConnectionMgr.getInstance();
		String sql = null;
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		
		try {
			connection = pool.getConnection();
			
			sql = "insert into user_mst\n"
					+ "values (0, ?, ?, ?, ?)";
			
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setString(1, user.getUsername());
			preparedStatement.setString(2, user.getPassword());
			preparedStatement.setString(3, user.getName());
			preparedStatement.setString(4, user.getEmail());
			
			successCount = preparedStatement.executeUpdate(); // insert, update, delete 명령 실행 적용된 행의 수가 리턴이된다.
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return successCount;
	}
	
	public static void main(String[] args) {
		
		UserInsert userInsert = new UserInsert();
		
		User user = User.builder()
				.username("ababc")
				.password("1234")
				.name("ababc")
				.email("ababc@gmail.com")
				.build();
		
		int successCount = userInsert.saveUser(user);
		System.out.println("쿼리 실행 성공: " + successCount + "건");
		
		
	}

}

 


트랜잭션

데이터베이스의 상태를 변환시키는 하나의 논리적 기능을
수행하기 위한 작업 단위 또는 한꺼번에 수행되어야할 일련의
연산을 의미한다.

트랜잭션의 특징(ACID)

  1. Atomicity(원자성)
    • 트랜잭션이 데이터베이스에 모두 반영이 되던지 아예 반영되지 않아야 한다.
    • 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하고 모두 완벽히 수행하지 않고 하나라도 오류가 발생한다면 트랜잭션은 모두 취소되어야한다.
  2. Consistency(일관성)
    • 트랜잭션의 작업처리 결과가 항상 일관성 있어야한다.
    • 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 수행 완료 후 상태가 같다.
  3. Isolation(독립성)
    • 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이더라도 다른 트랜잭션의 연산에 끼어들수 없다.
    • 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
  4. Durability(지속성)
    • 트랜잭션이 성공적으로 완료되면 결과는 영구적으로 반영되어야한다.

 


트랜잭션의 Commit 과 Rollback

Commit
커밋 연산은 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성있는 상태에 있을 때 하나의 트랜잭션이
끝났음을 알려주기 위해 사용하는 연산이다.

Rollback
하나의 트랜잭션처리가 비정상적으로 종료되어
데이터베이스의 일관성을 깨뜨렸을 때
일부 정상적으로 처리되었더라도 원자성을 구현하기 위해
모든 연산을 취소하는 연산이다.

 


트랜잭션의 상태

728x90
반응형

'SQL' 카테고리의 다른 글

데이터베이스와 초기설정  (0) 2023.04.25