기존의 tdel_idx 필드에 저장된 값이 순서대로 들어가 있다면, 다음 단계로 tdel_idx를 AUTO_INCREMENT 속성을 가진 PRIMARY KEY로 변경할 수 있다.
테이블 구조 수정:
tdel_idx 컬럼을 AUTO_INCREMENT로 변경하고 PRIMARY KEY로 설정
ALTER TABLE `tok_delete_keyword`
MODIFY COLUMN `tdel_idx` INT(10) NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`tdel_idx`);
중간에 누락된 번호가 있다면 AUTO_INCREMENT 값을 재설정:
기존의 데이터에 누락된 번호(예: 1, 2, 4, 5와 같이 3이 누락된 경우)가 있다면, AUTO_INCREMENT 값을 재설정하여 새로운 레코드 추가 시 연속된 값으로 할당되게 할 수 있다.
ALTER TABLE `tok_delete_keyword` AUTO_INCREMENT = [최대값 + 1];
여기서 [최대값 + 1]은 현재 tdel_idx의 최대값에서 1을 더한 값이다. 만약 최대값이 100이라면 AUTO_INCREMENT = 101과 같이 설정한다.
그런 다음, 새로운 데이터를 추가할 때마다 tdel_idx 값은 자동으로 증가된다.
기존의 tdel_idx 값을 재정렬하려면 다음과 같은 절차를 따르면 됩니다:
임시 테이블 생성:
현재 테이블의 데이터를 보관하기 위해 임시 테이블을 생성합니다.
sql
Copy code
CREATE TABLE `tok_delete_keyword_temp` LIKE `tok_delete_keyword`;
INSERT INTO `tok_delete_keyword_temp` SELECT * FROM `tok_delete_keyword`;
원래 테이블 삭제:
기존의 테이블을 삭제합니다.
sql
Copy code
DROP TABLE `tok_delete_keyword`;
새로운 테이블 생성:
tdel_idx를 AUTO_INCREMENT로 설정하여 새 테이블을 생성합니다.
sql
Copy code
CREATE TABLE `tok_delete_keyword` (
`tdel_idx` int(10) NOT NULL AUTO_INCREMENT COMMENT '삭제키워드 번호',
`tpl_idx` int(10) DEFAULT NULL COMMENT '프로젝트번호(공용일 경우 null)',
`tdel_name` varchar(50) DEFAULT NULL COMMENT '삭제키워드명',
`tdel_condition` varchar(4) DEFAULT NULL COMMENT '삭제조건(제목+본문:TC,제목:T,본문:C,작성자:W,URL:U)',
`tdel_pl_apply_chk` varchar(4) DEFAULT NULL COMMENT '프로젝트적용여부(C:공용,P:프로젝트)',
`tdel_state_code` varchar(4) DEFAULT NULL COMMENT '사용여부(0101:사용,0102:종료/중지)',
PRIMARY KEY (`tdel_idx`),
KEY `idx_tdel_tpl_state` (`tpl_idx`,`tdel_state_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='삭제 키워';
데이터 이동:
임시 테이블에서 새 테이블로 데이터를 옮깁니다. tdel_idx는 자동으로 증가되어 할당됩니다.
sql
Copy code
INSERT INTO `tok_delete_keyword` (`tpl_idx`, `tdel_name`, `tdel_condition`, `tdel_pl_apply_chk`, `tdel_state_code`)
SELECT `tpl_idx`, `tdel_name`, `tdel_condition`, `tdel_pl_apply_chk`, `tdel_state_code` FROM `tok_delete_keyword_temp`;
임시 테이블 삭제:
더 이상 임시 테이블이 필요하지 않으므로 삭제합니다.
sql
Copy code
DROP TABLE `tok_delete_keyword_temp`;
이제 tdel_idx는 연속된 AUTO_INCREMENT 값으로 재정렬되었습니다.
use DB_NAME
CREATE TABLE `DB_NAME_delete_keyword_temp` LIKE `DB_NAME_delete_keyword`;
INSERT INTO `DB_NAME_delete_keyword_temp` SELECT * FROM `DB_NAME_delete_keyword`;
SELECT * from `DB_NAME_delete_keyword`;
SELECT * from `DB_NAME_delete_keyword_temp`;
DROP TABLE `DB_NAME_delete_keyword`;
CREATE TABLE `DB_NAME_delete_keyword` (
`del_idx` int(10) NOT NULL AUTO_INCREMENT COMMENT '삭제키워드 번호',
`idx` int(10) DEFAULT NULL COMMENT '프로젝트번호(공용일 경우 null)',
`del_name` varchar(50) DEFAULT NULL COMMENT '삭제키워드명',
`del_condition` varchar(4) DEFAULT NULL COMMENT '삭제조건',
`del_pl_apply_chk` varchar(4) DEFAULT NULL COMMENT '적용여부(C:공용,P:프로젝트)',
`del_state_code` varchar(4) DEFAULT NULL COMMENT '사용여부(0101:사용,0102:종료/중지)',
PRIMARY KEY (`del_idx`),
KEY `idx_del_tpl_state` (`idx`,`del_state_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='삭제 키워드';
INSERT INTO `DB_NAME_delete_keyword` (`idx`, `del_name`, `del_condition`, `del_pl_apply_chk`, `del_state_code`)
SELECT `idx`, `del_name`, `del_condition`, `del_pl_apply_chk`, `del_state_code` FROM `DB_NAME_delete_keyword_temp`;
DROP TABLE `DB_NAME_delete_keyword_temp`;
'Development > MySql' 카테고리의 다른 글
[MariaDB] 비트 함수 및 연산자 (1) | 2024.08.27 |
---|---|
[MySQL] MySQL server has gone away (0) | 2023.08.11 |
[MySQL] sql_mode=only_full_group_by 에러 해결 방법 (0) | 2023.08.11 |
[MongoDB] MongoDB를 MySQL으로 마이그레이션 하기 (0) | 2023.08.07 |
[MySQL] 테이블 깨졌을 때 복구하기 (0) | 2023.08.04 |