CI 묻고 답하기

제목 $this->db->insert_id() 궁금한게 있어서 질문드립니다.ㅠㅠ
글쓴이 코드이구나 작성시각 2011/05/17 17:28:36
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 36409   RSS
완전초보입니다.
영세 업체 들어와서 프로젝트 혼자 다 떠맡겨서
개고생중입니다. ㅠㅠ

염치불구하고 질문들어갑니닥!!

상품을 등록하면서 상품에 대한 문제들도 같이 등록시키는 구조인데요.

상품테이블이랑 문제테이블이 나눠져있고 상품 ID는 auto_increment입니다.

상품 테이블을 insert하고 나서 문제테이블에도 상품 테이블의 id를 넣어줄려면

mysql_insert_id()를 호출하면 된다더라구요. ci에서는 $this->db->insert_id()하면 된다고 알고있습니다.

1. 그런데 insert가 끝난 뒤 insert_id를 호출하는 사이에 다른 누군가가 insert를 하게 되면 
잘못된 id를 얻어오게 되지 않나요?
 
2. 테이블 락이 걸린다는 말을 얼핏 들은 것 같은데 insert 구문이 끝남과 동시에 락이 풀리는 것이 아닌가요?

3. myisam랑 innodb 상관없이 insert_id는 제대로 구동이 되는 것인가요?

4. 마지막으로 저처럼 주문아이디나 상품아이디를 auto_increment로 하는 것은 좋지 못한 방법인가요?

완전 쌩초보가 돼놔서리 궁금한게 너무 많네요
제 질문이 잘못된 질문이라면 검색어라도 가르쳐주세용~ 제발염ㅠㅠ

ps. ci포럼에서 너무 많이 배우고 갑니다.;;; (_ _)(ㅡㅡ)(_ _)(ㅡㅡ);;


태그 mysql_insert_id,insert_id,lock,innodb,auto_increment
 다음글 db에 데이터 넣을때 주로 배열을 쓰시나요? 아니면 객... (4)
 이전글 처음설치했는데..오류가...설정문제인가요? (2)

댓글

양승현 / 2011/05/17 18:19:28 / 추천 0
1,2 번 문제..
/system/database/drivers/mysql/mysql_driver.php
- line 308~
    function insert_id()
    {
        return @mysql_insert_id($this->conn_id);
    }
$this->db->insert_id()또한 mysql의 mysql_insert_id()를 리턴 하는거랍니다.
커넥션에 대한 mysql_insert_id 값을 가져오는거지요.

인서트후 셀렉트 하는 방식이 아니라 상관없을거에요.

3. innodb는 사용을 안해봐서 잘 모르겠네요. 하지만 문제 없을듯 보입니다.

4. 주문아이디와 상품아이디등 유니크한값이 필요한곳에 auto_increment를 사용하는게 일반적입니다.

추가로 여러곳에서 하나의 유니크한값을 사용해야 할 경우에는 시퀀스를 이용하는 방법도 있어요.
(미리 유니크한 값을 받아서 프로세스를 처리해야 할경우에도 사용된답니다.)

내부적으로는 저 유니크값을 사용하여 처리를 하고 외부에는 다른값을 보여주곤 합니다.
(상품코드 = ASDF100201010 이런식으로요 ^^;)

도움이 되었을런지 모르겠네요.

코드이구나 / 2011/05/18 08:48:04 / 추천 0

완전많이 도움됐습니다!!! 정말감사합니다 이해가 쏙쏙되네요~ㅋ