Database

[Database] Auto Increment

Richard.Ryu 2024. 3. 18. 15:07
반응형

Auto_Increment > Auto increment 로 지정된 Column은 데이터가 추가될 시, 자동으로 해당 값을 할당 해줍니다.

 

아래 테이블에서는 id가 auto_increment로 지정되어 있습니다.

+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL              | auto_increment |
| username   | varchar(50)  | NO   |     | NULL              |                |
| email      | varchar(100) | NO   |     | NULL              |                |
| created_at | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+
+----+----------+---------------+---------------------+
| id | username | email         | created_at          |
+----+----------+---------------+---------------------+
|  1 | ryu      | ryu@test.com  | 2024-03-18 01:21:47 |
|  2 | kim      | kim@test.com  | 2024-03-18 01:21:47 |
|  3 | shin     | shin@test.com | 2024-03-18 01:21:47 |
|  4 | oh       | oh@test.com   | 2024-03-18 01:21:47 |
|  5 | jeon     | jeon@test.com | 2024-03-18 01:21:47 |
|  6 | chun     | chun@test.com | 2024-03-18 01:21:47 |
|  7 | baek     | baek@test.com | 2024-03-18 01:21:47 |
|  8 | lee      | lee@test.com  | 2024-03-18 01:21:47 |
+----+----------+---------------+---------------------+

8번까지 데이터에서  8을 지우고 다음 행 삽입하면, 8부터가 아니라, 9부터 시작합니다.

 

또, 전 단계에서 수행한 delete 문으로 모든 행을 지웠을 시에도

 

동일하게 데이터의 마지막 행 이후부터 ID 값이 시작합니다.(아래 예시 참고)

+----+----------+----------------+---------------------+
| id | username | email          | created_at          |
+----+----------+----------------+---------------------+
|  1 | ryu      | ryu@test.com   | 2024-03-18 01:21:47 |
|  2 | kim      | kim@test.com   | 2024-03-18 01:21:47 |
|  3 | shin     | shin@test.com  | 2024-03-18 01:21:47 |
|  4 | oh       | oh@test.com    | 2024-03-18 01:21:47 |
|  5 | jeon     | jeon@test.com  | 2024-03-18 01:21:47 |
|  6 | chun     | chun@test.com  | 2024-03-18 01:21:47 |
|  7 | baek     | baek@test.com  | 2024-03-18 01:21:47 |
|  8 | park     | park@test.com  | 2024-03-18 01:38:24 |
|  9 | jeong    | jeong@test.com | 2024-03-18 01:55:06 |
| 17 | jeong    | jeong@test.com | 2024-03-18 01:56:25 |
+----+----------+----------------+---------------------+

 

위 테이블은 예시로 9에서 17로 바로 건너 뛴 것을 확인 할 수 있습니다.

 

방법은 2가지가 있으나.. update 문으로는 현재 상황에서만 변경하는 거라서,

 

신규 데이터를 추가하면, 또 다시 발생합니다.

 

ALTER TABLE 을 사용하여, 다시 현재 테이블에 맞게 1부터 시작하도록 합니다.

 

사용할 SQL > ALTER TABLE {TABLE} AUTO_INCREMENT = 1;

 

1. 17번에 위치한 Data를 삭제합니다.

delete from users where id = 17;

 

2. alter table 로 테이블 구조를 변경합니다.

ALTER TABLE users AUTO_INCREMENT = 1;

 

3. insert 데이터 삽입 확인

INSERT INTO users(username, email) values('jeong', 'jeong@test.com');

MariaDB [test]> insert into users(username, email) values('jeong', 'jeong@test.com');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> select * from users;
+----+----------+----------------+---------------------+
| id | username | email          | created_at          |
+----+----------+----------------+---------------------+
|  1 | ryu      | ryu@test.com   | 2024-03-18 01:21:47 |
|  2 | kim      | kim@test.com   | 2024-03-18 01:21:47 |
|  3 | shin     | shin@test.com  | 2024-03-18 01:21:47 |
|  4 | oh       | oh@test.com    | 2024-03-18 01:21:47 |
|  5 | jeon     | jeon@test.com  | 2024-03-18 01:21:47 |
|  6 | chun     | chun@test.com  | 2024-03-18 01:21:47 |
|  7 | baek     | baek@test.com  | 2024-03-18 01:21:47 |
|  8 | park     | park@test.com  | 2024-03-18 01:38:24 |
|  9 | jeong    | jeong@test.com | 2024-03-18 01:57:40 |
+----+----------+----------------+---------------------+

MariaDB [test]> insert into users(username, email) values('yu', 'yu@test.com');
+----+----------+----------------+---------------------+
| id | username | email          | created_at          |
+----+----------+----------------+---------------------+
|  1 | ryu      | ryu@test.com   | 2024-03-18 01:21:47 |
|  2 | kim      | kim@test.com   | 2024-03-18 01:21:47 |
|  3 | shin     | shin@test.com  | 2024-03-18 01:21:47 |
|  4 | oh       | oh@test.com    | 2024-03-18 01:21:47 |
|  5 | jeon     | jeon@test.com  | 2024-03-18 01:21:47 |
|  6 | chun     | chun@test.com  | 2024-03-18 01:21:47 |
|  7 | baek     | baek@test.com  | 2024-03-18 01:21:47 |
|  8 | park     | park@test.com  | 2024-03-18 01:38:24 |
|  9 | jeong    | jeong@test.com | 2024-03-18 01:57:40 |
| 10 | yu       | yu@test.com    | 2024-03-18 01:58:30 |
+----+----------+----------------+---------------------+

 

위와 같이 9,10번으로 정상적으로 들어간 것을 확인할 수 있습니다.

반응형