티스토리 뷰




궁금증 1.


MySQL Auto Increment 필드에 값을 임의로 지정해서 insert 할경우, 

다음 auto increment 값은 insert 한 값 뒤부터 시작될까?



테스트


아래와 같은 테이블이 있다.


mysql> desc test1;

+-------+---------+------+-----+---------+----------------+

| Field | Type    | Null | Key | Default | Extra          |

+-------+---------+------+-----+---------+----------------+

| id    | int(11) | NO   | PRI | NULL    | auto_increment |

| test1 | text    | YES  |     | NULL    |                |

+-------+---------+------+-----+---------+----------------+

2 rows in set (0.00 sec)


위와같이, id 값이 1 씩 증가하는 auto_increment 속성을 가진 필드

우선, 데이터를 한개 insert 해봄


mysql> insert into test1 (test1) value ('www');

Query OK, 1 row affected (0.00 sec)


mysql> select * from test1;

+----+-------+

| id | test1 |

+----+-------+

|  1 | www   |

+----+-------+

1 row in set (0.00 sec)



ID 값이 1로 자동설정되었음.

이제, insert 할때 id 값을 5로 주고 해본다


mysql> insert into test1 (id, test1) value (5, 'www');

Query OK, 1 row affected (0.00 sec)


mysql> select * from test1;

+----+-------+

| id | test1 |

+----+-------+

|  1 | www   |

|  5 | www   |

+----+-------+

2 rows in set (0.00 sec)



5가 되었음




여기서 id 값 없이 다음 insert 를 실행하면 id 는 6으로 되는가?


mysql> insert into test1 (test1) value ('sss');

Query OK, 1 row affected (0.00 sec)


mysql> select * from test1;

+----+-------+

| id | test1 |

+----+-------+

|  1 | www   |

|  5 | www   |

|  6 | sss   |

+----+-------+

3 rows in set (0.00 sec)



6임






궁금증 2.


그렇다면, 이 상태에서 id 값을 다시 2로 메뉴얼리 인서트 하게 되면?





테스트 


mysql> insert into test1 (id, test1) value (2, 'ttt');

Query OK, 1 row affected (0.00 sec)


mysql> select * from test1;

+----+-------+

| id | test1 |

+----+-------+

|  1 | www   |

|  5 | www   |

|  6 | sss   |

|  2 | ttt   |

+----+-------+

4 rows in set (0.00 sec)




6다음 2가 나옴



그럼 여기서 다시 id 값 없이 insert 하게 되면??


mysql> insert into test1 (test1) value ('ooo');

Query OK, 1 row affected (0.00 sec)


mysql> select * from test1;

+----+-------+

| id | test1 |

+----+-------+

|  1 | www   |

|  5 | www   |

|  6 | sss   |

|  2 | www   |

|  7 | ooo   |

+----+-------+

5 rows in set (0.00 sec)


7 이 됨. 


왜 그런지는 MySQL Auto Increment 에 대한 공식 문서를 읽어 본 후 다시 블로그에 써야겠다

(지금 드는 생각으로는 그냥 테이블의 최댓값 다음값으로 설정하는것이 아닐까 생각은 듬)




궁금증 3.


auto increment 값을 update 로 바꿔놓으면?





테스트


mysql> update test1 set id=50 where id=2;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0


mysql> select * from test1;

+----+-------+

| id | test1 |

+----+-------+

|  1 | www   |

|  5 | www   |

|  6 | sss   |

| 50 | www   |

|  7 | ooo   |

+----+-------+

5 rows in set (0.00 sec)



50으로 바꿔봤다.


다시 그냥 insert 해보쟈


mysql> insert into test1 (test1) value ('xxx');

Query OK, 1 row affected (0.00 sec)


mysql> select * from test1;

+----+-------+

| id | test1 |

+----+-------+

|  1 | www   |

|  5 | www   |

|  6 | sss   |

| 50 | www   |

|  7 | ooo   |

| 51 | xxx   |

+----+-------+

6 rows in set (0.00 sec)








Documentation of Auto_increment in MySQL


AUTO_INCREMENT column 속성에 특정한 값을 지정해 놓지 않는다면, MySQL 이 자동적으로 sequence number 를 할당합니다.

NO_AUTO_VALUE_ON_ZERO SQL mode 가 켜져있지 않는한, 당신은 해당 column 을 0으로 명시할 수 있습니다. 


당신이 'AUTO_INCREMENT' column 에 다른 값을 넣을때, 해당 컬럼의 sequence number 는 자동적으로 해당 column 의 최대값로 수정된다.


자동으로 최댓값을 따른다고 명시되어있음






공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함