jdbc 프로그래밍을 하시다 보면, PreparedStatement랑 statement는 많이 들어보셨으리라 생각이 듭니다. 이 중 전자를 '준비된 구문' 이라고 이야기를 하는데요. 이 둘에 대해서 간단하게 알아보겠습니다. 예제 프로그램 1을 보겠습니다. 그 전에 테이블 t의 필드 a와 b는 varchar형입니다. 필드 최대 길이는 20으로 잡았습니다. 딱히 어려운 것은 없고, Statement라는 것이 있고, 이것은 SQL을 집어넣습니다. 그런데, SQL은 where a' 라는 문자열과 str과 '가 있는 문자열을 연결하고 있어요. str은 어디서 들어올까요? main에서 입력을 받습니다. 그러면 재미있는 장난 한 번 쳐 보겠습니다. a' or 1 = 1# 이라고 입력해 봅시다. mysql에서 주석은 ..
코딩/Sql 검색 결과
오늘은 read commit와 repeatable read 격리에 대해서 간단하게 알아보겠습니다. 세션 1에서 다음 쿼리들을 수행할 겁니다. Query1, Query2, Query3을 수행합니다. 다음에 세션 2에서 쿼리 4만 수행합니다. 중요한 것은 Query1과 Query2 사이에 Query4를 수행합니다. 처음에 테이블 t에 들어있는 데이터는 다음과 같습니다. Session 1이 query1까지 수행하고, Session 2가 update를 수행하고 커밋을 했을 때, 다시 t에 있는 내용들을 출력해 보겠습니다. 어? 똑같군요. 이제 세션 1의 t1을 commit를 한 다음에 다시 t에 있는 데이터들을 모두 출력해 보겠습니다. 그제서야 a가 1인 레코드의 b의 값이 10으로 업데이트가 됩니다. 즉, 우..
요새 롯데 자이언츠의 상승세가 무섭습니다. 이번 년도에 가을야구 갈 거 같습니다. 초반부터 야구 이야기를 해서 죄송합니다. group by에서 2개 이상의 속성으로 그룹화를 하고 싶을 때 어떻게 해야 좋을까요? 오늘 그것을 배워보고 응용 문제를 하나 풀어보겠습니다. 쿼리부터 알아보겠습니다. group by 절에 속성(1)부터 속성(n)까지 좌르륵 넣어줍니다. 이는 나누는 기준이 속성(1),...,속성(n)임을 의미합니다. 예를 들어서, 나누는 기준이 년, 분기였다면, 2015년 1분기, 2015년 2분기, 2015년 3분기, 2015년 4분기, ... 등으로 그룹화가 된다는 것입니다. 그리고, 노란색에 나타난 attribute는 select 절에 똑같이 나타나야 합니다. 이것만 보시면 이해가 안 되실 듯..
이 글은 commit과 rollback에 대해서 깊게 들어가지 않습니다. 큰 그림만 그리는 글이니, 심도 있는 글을 원하신다면 다른 (좋은) 글을 보시는 것을 권장합니다. Transaction이란, 작업 단위를 의미합니다. 그러면, 작업을 했을 때, 성공적으로 수행이 된 경우가 있고, 실패가 된 경우가 있을 겁니다. 이 때 어떻게 처리해야 할까요? 이전에 제가 Thread에서 stop을 호출하는 게 왜 위험할까요? 라는 질문을 한 적이 있었습니다. 그에 대한 답은 절반만 수행된 상태가 나타나기 때문입니다. 원소가 삭제는 되었는데, 크기가 바뀌지 않은 경우가 그 예입니다. 이것을 데이터베이스의 '작업'에도 적용을 시켜 보겠습니다. school 데이터 베이스의 takes 릴레이션에서 ID가 1000이고, 수..
db 교과서를 보니, 이런 문제가 나왔습니다. 왜 null 값이 도입되었을까? 사실 필요가 없어서, 도입되지는 않았을 겁니다. 몇 가지 상황에 대한 예를 들어보겠습니다. 농수산물에 대한 데이터 베이스가 있다고 생각해 보겠습니다. 테이블 하나만 고려해 보겠습니다. 각각 카데고리, 생산품의 고유 id, 생산자의 id를 의미합니다. 물론, 이것이 정보의 다는 아닙니다. 각 카데고리 id별로 어떠한 품목인지 저장하고 있는 테이블이 있을 겁니다. 그리고, product_id별로, 해당 상품의 이름을 저장하는 테이블도 있을 겁니다. 그리고, 생산자의 id와 생산자에 대한 정보를 저장하는 테이블 또한 있을 겁니다. 여기에서는 그냥 간단하게 이것 하나만 고려해 보도록 하겠습니다. 농수산물 p를 생산했지만, 누가 생산했..
최근댓글