programing

MySQL InnoDB: 기본 키가 아닌 자동 증분

mailnote 2023. 9. 3. 16:30
반응형

MySQL InnoDB: 기본 키가 아닌 자동 증분

기본 키가 아닌 키를 자동으로 늘릴 수 있습니까?

표 "book_comments"

book_id     medium_int
timestamp   medium_int
user_id     medium_int
vote_up     small_int
vote_down   small_int
comment     text
comment_id  medium_int

Primary key -> (book_id, timestamp, user_id)

이 테이블에는 다른 인덱스가 없습니다.하지만, 저는 다음을 만들고 싶습니다.comment_id열 자동 증분을 사용하여 다른 테이블을 쉽게 만들 수 있습니다.

표 "book_comments_votes"

comment_id  (medium_int)
user_id     (medium_int)

Primary key -> (comment_id, user_id)

사용자는 북 코멘트당 한 번만 투표할 수 있습니다.이 테이블은 기본 키를 기준으로 이 규칙을 적용합니다.

질문:.

기본 키가 아닌 키를 자동으로 증분할 수 있습니까?comment_id표 "book_book"의 열?


대안, 토론.

위에서 설명한 것처럼 단순화를 위해 이 작업을 수행하고자 합니다.대안은 유망하지 않습니다.

  • commnet_id PK를 만들고 다음에 대한 고유 인덱스를 통해 무결성을 적용합니다.book_id, timestamp, user_id이 경우, 저는 추가 인덱스를 작성할 것입니다.
  • PK를 유지하고 다음에서 comment_id를 바꿉니다.book_comments_votesPK 전체와 함께.이것은 테이블의 크기를 세 배 이상 늘릴 것입니다.

제안?생각은?

네, 가능합니다.해당 열을 인덱스로 만들기만 하면 됩니다.

CREATE TABLE `test` (
  `testID` int(11) NOT NULL,
  `string` varchar(45) DEFAULT NULL,
  `testInc` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`testID`),
  KEY `testInc` (`testInc`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;


insert into test(
  testID,
 string
)
values (
1,
    'Hello'
);


insert into test( 
testID,
 string
)
values (
2,
    'world'
);

'testInc'에 대한 자동 증분 값을 가진 행을 삽입합니다.하지만 이것은 정말 멍청한 짓입니다.

이미 올바른 방법을 말씀하셨습니다.

"comment_id PK를 만들고 book_id, timestamp, user_id에 대한 고유 인덱스를 통해 무결성을 강화합니다."

그것이 바로 당신이 해야 할 일입니다.향후 쿼리에 필요한 테이블에 대한 적절한 기본 키를 제공할 뿐만 아니라 최소한의 놀라움의 원칙도 충족합니다.

기존 테이블이 있습니다.이미 기본 키를 제공한 경우comment_id유일한 목적은 auto_message를 설정하는 것입니다.기본 키를 해당 열에 놓을 수 있습니다.MySQL을 사용하면 키 속성이 있는 열에서 auto_increment에 액세스할 수 있습니다.그러니 색인을 사용해보거나,unique key로.comment_id아래와 같이

1.기본 키 제거

ALTER TABLE `book_comments` MODIFY `comment_id` INT(5) NOT NULL;

ALTER TABLE `book_comments` DROP PRIMARY KEY ;
  1. 더하다AUTO_INCREMENT와 함께UNIQUE_KEY소유물.

ALTER TABLE 'brand_keywords' CHANGE COLUMN 'comment_id' 'comment_id' INT(5) NOT NULL AUTO_INCREMENT UNIQUE;

MySQL 5.5의 경우, 이 기능이 없어도 가능할 것으로 보입니다. 색인 또는 기본 키 자동 증분과 함께 제공될 INT 필드.

언급URL : https://stackoverflow.com/questions/14086324/mysql-innodb-autoincrement-non-primary-key

반응형