mysql 테이블 auto_increment (사후)에 ID를 만드십시오.
다른 개발자로부터 데이터베이스를 얻었습니다. 그는 어떤 테이블에도 auto_incrementers를 사용하지 않았습니다. 그들은 모두 기본 키 ID를 가지고 있지만 코드에서 모든 증분을 수동으로 수행했습니다.
지금 Auto_incrementers로 바꿀 수 있습니까?
와, 아주 좋아요. 정말 고마워요. 내 테이블 중 하나에서 문제없이 작동했습니다. 그러나 두 번째 테이블, 나는이 오류가 발생합니다 ... '. \ DBNAME # sql-6c8_62259c'의 이름을 '. \ DBNAME \ dealer_master_events'로 바꿀 때 오류가 발생했습니다.
예를 들어 다음은 기본 키가 있지만 그렇지 않은 테이블입니다 AUTO_INCREMENT
.
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
MODIFY
다음 AUTO_INCREMENT
옵션 을 사용하여 열을 재정의 할 수 있습니다 .
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
효과가 있는지 확인하십시오.
mysql> SHOW CREATE TABLE foo;
출력 :
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
두 번째 열을 만들고 원래 열을 삭제할 필요없이 열 정의를 제자리에서 수정했습니다. PRIMARY KEY
제약은 영향을받지 않습니다, 당신은에서의 언급 할 필요가 없습니다 ALTER TABLE
문.
다음으로 삽입이 새 값을 생성하는지 테스트 할 수 있습니다.
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
출력 :
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
Mac OS X의 MySQL 5.0.51에서 테스트했습니다.
나는 또한 ENGINE=InnoDB
종속 테이블로 테스트했습니다 . id
열 정의를 수정 해도 참조 무결성이 중단되지 않습니다.
의견에서 언급 한 오류 150에 응답하려면 외래 키 제약 조건과 충돌 할 수 있습니다. 죄송합니다. 테스트 한 후 작동 할 것이라고 생각했습니다. 다음은 문제 진단에 도움이 될 수있는 몇 가지 링크입니다.
- mysql 오류 1025 (HY000) : './foo'이름 변경시 오류 (오류 번호 : 150)는 무엇을 의미합니까?
- http://www.simplicidade.org/notes/archives/2008/03/mysql_errno_150.html
위의 어느 것도 내 테이블에서 작동하지 않았습니다. 0에서 31543 사이의 값을 가진 기본 키로 부호없는 정수가있는 테이블이 있습니다. 현재 1 만 9 천 개 이상의 레코드가 있습니다. 열을 AUTO_INCREMENT
( MODIFY COLUMN
'id' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT
) 로 수정 AUTO_INCREMENT = 31544
하고 같은 명령문에서 seed ( )를 설정해야했습니다 .
ALTER TABLE `'TableName'` MODIFY COLUMN `'id'` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 31544;
기존 데이터를 다시 증가시킬 필요가 없다고 생각하는데, PK의 속성을 변경하기 위해 간단한 ALTER TABLE 명령을 실행할 수없는 이유는 무엇입니까?
다음과 같은 것 :
ALTER TABLE `content` CHANGE `id` `id` SMALLINT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT
이 코드를 내 MySQL 데이터베이스에서 테스트했으며 작동하지만 의미있는 수의 레코드로 시도하지 않았습니다. 행을 변경 한 후에는 다른 레코드를 방해하지 않도록 보장 된 숫자로 증분을 재설정해야합니다.
ALTER TABLE `content` auto_increment = MAX(`id`) + 1
다시 말하지만 테스트되지 않았지만 작동 할 것이라고 믿습니다.
이것은 나를 위해 일했습니다 (ID를 기본으로 만들고 자동 증가를 설정하고 싶었습니다)
ALTER TABLE table_name
CHANGE id
id
INT PRIMARY KEY AUTO_INCREMENT;
예, 쉽습니다. 데이터 정의 쿼리를 실행하여 테이블을 업데이트하고 AUTO_INCREMENT 열을 추가하면됩니다.
기존 데이터베이스가있는 경우 "인위적으로 생성 된"기본 키에 이미있을 수있는 외래 키 관계를 유지하도록주의하십시오.
ALTER TABLE `foo` MODIFY COLUMN `bar_id` INT NOT NULL AUTO_INCREMENT;
또는
ALTER TABLE `foo` CHANGE `bar_id` `bar_id` INT UNSIGNED NOT NULL AUTO_INCREMENT;
그러나 bar_id
다른 테이블의 외래 키인 경우이 중 어느 것도 작동하지 않습니다 .
an error 1068: Multiple primary key defined
이를 해결하기 위해 일시적으로 외래 키 제약 조건 검사를
set foreign_key_checks = 0;
위의 명령문을 실행 한 후 다시 활성화하십시오.
set foreign_key_checks = 1;
As long as you have unique integers (or some unique value) in the current PK, you could create a new table, and insert into it with IDENTITY INSERT ON. Then drop the old table, and rename the new table.
Don't forget to recreate any indexes.
참고URL : https://stackoverflow.com/questions/251479/make-an-id-in-a-mysql-table-auto-increment-after-the-fact
'Program Tip' 카테고리의 다른 글
Maven은 npm과 유사합니까? (0) | 2020.12.11 |
---|---|
로컬에서 파일을 삭제 한 후 SVN 커밋 오류 (0) | 2020.12.11 |
일치하는 행을 삭제하는 더 빠른 방법? (0) | 2020.12.11 |
C #에서 F # List.map에 해당합니까? (0) | 2020.12.11 |
Bash의 변경 가능한 목록 또는 배열 구조? (0) | 2020.12.11 |