programing

여러 열을 mysql의 고유 식별자로 사용

magicmemo 2023. 9. 8. 21:21
반응형

여러 열을 mysql의 고유 식별자로 사용

다음 열이 있는 mysql 테이블이 있습니다.

group_id
game_id
user_id
message
last_update

행 x에 대한 group_id의 값이 행 y에 대한 group_id의 값과 같고 행 x에 대한 user_id의 값이 행 y에 대한 user_id의 값과 동일한 두 개의 user_id 값도 행 x에 대한 user_id의 값도 행 y에 대한 user_id의 값과 같습니다.

예를 들어, 다음 값을 삽입한다고 가정해 보겠습니다.

group_id = 783
game_id = 34
user_id = 29237
message = none
last_update = 11233452

상기 데이터는 mysql 쿼리가 삽입을 시도하더라도 group_id와 user_id의 조합이 같은 행이 이미 존재하는 경우 새 행을 만들지 않아야 합니다.이것을 할 방법이 방법이 있습니까?기본적으로, 저는 두 개의 열을 하나의 독특한 색인처럼 함께 작업하려고 노력하고 있습니다.

예, MySQL은 이러한 기능을 제공합니다.

ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)

이 테이블을 무슨 용도로 쓰시는지 모르겠지만, 이 고유 키가 테이블의 기본 키로 유력한 후보가 될 수도 있는 것 같습니다.기본 키도 자동으로 고유 키입니다.기본 키로 결정한 경우 대신 다음을 수행합니다.

ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)

(기본 키가 이미 있다는 오류 메시지가 나타나면 해당 키를 발행합니다.ALTER TABLE MyTable DROP PRIMARY KEY위의 명령을 반복합니다.)

편집: 사용자 의견에 대한 응답

동일한 비-행이 있는 행은 여러 개일 수 없습니다.NULL고유 키가 적용하는 열에 대한 값입니다.그래서 당신은 두 개의 행을 가질 수 없습니다.group_id = 0 AND user_id = 5,예를들면.0은 값입니다.그러나 두 열 중 하나 또는 둘 다 무효로 만들면 위치 지정까지 동일한 행이 여러 개 있을 수 있습니다.NULLs. 따라서 두 개(또는 그 이상)의 행을 가질 수 있습니다.group_id IS NULL AND user_id = 1234.

단서:위 내용은 일반적으로 사용되는 MySQL 스토리지 엔진(MyISAM 및 InnoDB) 모두에 적용됩니다.MySQL에는 다음과 같은 스토리지 엔진이 있습니다.NULL고유한 값으로 간주되지만 사용하지 않을 수 있습니다.

하나 또는 두 열을 모두 null로 만들면 고유한 키가 기본 키가 될 수 없습니다. 기본 키는 다음 열에 있어야 합니다.NOT NULL.

이 키를 기본 키로 만들었고 이제 허용하려고 한다고 가정합니다.NULL에서group_id기둥.어떤 데이터 유형인지 모르겠습니다.group_id지금 이 순간입니다. 제 생각엔 지금 이 순간적으로INT UNSIGNED NOT NULL, 하지만 이것이 아니라면 아래를 수정해야 합니다.더 이상 이 키를 기본 키로 사용할 수 없습니다.원하는 변경을 위해 실행할 수 있는 명령어는 다음과 같습니다.

ALTER TABLE MyTable
    DROP PRIMARY KEY,
    MODIFY group_id INT UNSIGNED,
    ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)

이것을 위해 phpmyadmin 또는 sqlyog와 같은 mysql 편집기를 사용하여 group_id와 user_id의 복합 키를 생성하고 고유 인덱스로 표시할 수 있습니다.

언급URL : https://stackoverflow.com/questions/3798555/use-multiple-columns-as-unique-identifier-for-mysql

반응형