여러 열을 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은 값입니다.그러나 두 열 중 하나 또는 둘 다 무효로 만들면 위치 지정까지 동일한 행이 여러 개 있을 수 있습니다.NULL
s. 따라서 두 개(또는 그 이상)의 행을 가질 수 있습니다.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
'programing' 카테고리의 다른 글
iPhone Provisioning Portal에서 App ID를 제거하는 방법 (0) | 2023.09.08 |
---|---|
아직 존재하지 않는 InnoDB 행을 잠그려면 어떻게 해야 합니까? (0) | 2023.09.08 |
문자열의 가능한 모든 순열 목록 생성 (0) | 2023.09.08 |
Laravel - my Web services Api를 여러 번 호출하면 데이터베이스의 단일 항목과 데이터베이스의 복제 기록 논리를 무시합니다. (0) | 2023.09.08 |
함수(콜백)를 다른 함수의 인수로 사용하는 것은 파이썬에서 어떻게 작동합니까? (0) | 2023.09.08 |