MySQL 테이블에 값을 삽입할 때 자동 증분 기본 키의 속성을 재정의하는 방법은 무엇입니까?
기본 키가 자동 증가 정수인 MySQL 사용자 테이블을 가지고 있습니다.테이블에는 키가 0에서 30.000 사이인 레코드가 이미 채워져 있습니다.하지만 모든 기록이 다 있는 것은 아닙니다.일부 사용자가 제거되어 "구멍"이 생겼습니다.
이제 고객은 실수로 다수의 사용자를 제거했다는 것을 깨달았고, 다른 컴퓨터에서 실행되지만 고객에게 동일한 ID를 사용하는 전자 상거래의 백엔드와의 호환성을 위해 사용자에게 동일한 ID를 유지하도록 다시 삽입하기를 원합니다.
지금 내가 있는 순간:
- ID에서 auto_increment 속성을 제거하여 테이블 구조 변경
- 필요한 레코드 추가, ID 지정
- 변경 사항을 테이블의 구조로 되돌리기.
이를 달성하기 위한 더 나은 방법이 있습니까?SQL이 있습니까?override
MySQL이 고유하지만 반드시 "행의 다음 숫자"는 아닌 값을 받아들이도록 강제할 수 있는 기능?
당신은 당신이 그들을 비활성화할 필요가 없습니다.auto_increment
특징.테이블에 행을 삽입하고 행에 기본 키 값을 지정하면 원하는 ID가 데이터베이스에 저장됩니다.auto_increment
기본 키 필드를 생략하는 경우에만 사용됩니다.
편집: 예를 들면 다음과 같습니다.
mysql> describe test;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| value | varchar(45) | NO | | NULL | |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.02 sec)
mysql> insert into test (value) values ('row 1');
Query OK, 1 row affected (0.06 sec)
mysql> select * from test;
+----+-------+
| id | value |
+----+-------+
| 1 | row 1 |
+----+-------+
1 row in set (0.00 sec)
mysql> insert into test values (15, 'row 2');
Query OK, 1 row affected (0.03 sec)
mysql> select * from test;
+----+-------+
| id | value |
+----+-------+
| 1 | row 1 |
| 15 | row 2 |
+----+-------+
2 rows in set (0.00 sec)
EDIT 2
mysql> insert into test (id, value) values (3, 'row 3');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+-------+
| id | value |
+----+-------+
| 1 | row 1 |
| 15 | row 2 |
| 3 | row 3 |
+----+-------+
3 rows in set (0.00 sec)
저도 비슷한 문제가 있었습니다.업데이트에서 ID를 임의의 숫자로 설정할 수 있는 것을 발견했지만, 삽입 시 현재 최소값 이하로 설정할 수는 없습니다.이 문제를 해결하기 위해 Import 데이터를 일련의 SQL 문으로 변환하는 스크립트를 작성했습니다. 각 데이터 행에 대해 다음과 같은 쌍이 있습니다.
// This inserts the record with the next auto_increment id<br />
INSERT INTO mytable (ID, NAME, OTHER_COL...) VALUES (17, 'UNIQUE VALUE', 'other value'...);<br />
// This sets the correct ID on the newly inserted record<br />
UPDATE mytable SET ID=17 WHERE NAME='UNIQUE VALUE';
고유한 필드가 없는 경우 SQL을 작성하여 가장 큰 ID를 가져온 후 다음 레코드를 삽입하기 전에 올바른 ID로 업데이트할 수 있습니다.도움이 됐으면 좋겠네요!
AUTO_INCRECTION(또는 데이터베이스의 ID 필드) 구현과 관련된 문제를 방지하기 위해 데이터베이스 외부의 무언가(사용자 또는 시스템)가 값에 대해 알아야 할 때는 절대 사용하지 않습니다.
MySQL 문서에는 다음과 같이 나와 있습니다.
AUTO_INCREMENT 특성을 사용하여 새 행에 대한 고유 ID를 생성할 수 있습니다.
제 생각에는, 당신이 신경써야 할 것은 그것뿐입니다.숫자는 거기에 있고 그것들은 독특합니다.그것들이 무엇인지 그리고 그것들이 "틈" 또는 "구멍"이 있는지는 신경쓰지 마세요.외부에서 볼 수 있는 신분증을 원한다면, 아마도 어떤 종류의 GUID가 더 나을 것입니다.
당신이 사용하는 드라이버가 테이블 스키마를 읽고 그것에 적응하는 것은 가능합니다.는.auto_increment
컬럼은 값을 건너뜁니다.C#입니다 C#은의 입니다.DataAdapter
, identity 열을 포함하는 insert 문 생성에서와 같습니다.
그대로.DataAdapter
할 수 입니다를 입니다.insert
지휘.
저도 같은 문제가 있어서 여기서 발견했습니다.더 오래된 것이라 할지라도 누군가에게 도움이 될 수도 있습니다.
자동 증분은 NEW 삽입된 역할에만 적용됩니다.테이블에서 현재 가장 높은 증분-값보다 낮은 지정된 값으로 새 역할을 설정할 수 없습니다.
이 문제를 해결하려면 새 행을 삽입하고(자동 증가 값이 설정되도록) 나중에 이 값을 변경하기만 하면 됩니다! (값이 사용되지 않으면 작동합니다.)
untestet: 자동 increment 카운터를 재설정하면 문제가 해결될 수도 있습니다.
언급URL : https://stackoverflow.com/questions/1884387/how-to-override-the-attribution-of-an-auto-incrementing-primary-key-when-inserti
'itsource' 카테고리의 다른 글
약속 - 약속을 강제로 취소할 수 있습니까? (0) | 2023.09.24 |
---|---|
C 네임스페이스 이해 (0) | 2023.09.24 |
XML 인스턴스 문서에서 XSD 스키마를 생성하는 도구가 있습니까? (0) | 2023.09.24 |
ANSIC 대 기타 C 표준 (0) | 2023.09.24 |
대시 또는 이름에 하이픈(-)이 있는 Python 모듈 (0) | 2023.09.24 |