MySQL이 0을 유효한 자동 증분 값으로 사용하도록 강제하는 방법
요약하자면, 저는 Import할 SQL 파일이 있습니다.skel
이 작업은 프로그래밍 방식으로 반복적으로 수행됩니다.SQL 파일을 원하는 대로 편집할 수 있지만 애플리케이션 자체는 건드리지 않는 것이 좋습니다.
이 어플리케이션에서는userid = 0
어나니머스 사용자를 나타냅니다.또한 이 '사용자'를 나타내는 관련(빈) 항목이 데이터베이스에 있습니다.그래서 제 대사에는skel.sql
다음과 같습니다.
INSERT INTO `{{TABLE_PREFIX}}users` VALUES (0, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);
이 문제의 문제점은uid
는 입니다.auto_increment
엄밀히 따지면,0
유효하지 않은 값입니다.또는 적어도 0으로 설정하면 기본적으로 MySQL에 "다음 ID를 이 필드에 삽입하십시오."라고 말하는 것입니다.
자, 이제, 내가 이걸 넣을 수 있을 것 같아.INSERT
그 다음에UPDATE
내 SQL 파일에 쿼리하지만 일반적으로 MySQL에 yes, 실제로 삽입하고 싶다고 말할 수 있는 방법이 있습니다.0
이 분야로 진출할 수 있을까요?
내가 여기서 들은 대답으로는:
다음을 사용할 수 있습니다.
SET [GLOBAL|SESSION] sql_mode='NO_AUTO_VALUE_ON_ZERO'
여기서 설명한 바와 같이 MySQL은 INSERT/UPDATE ID 0을 다음 시퀀스 ID로 해석할 수 없습니다.이러한 동작은 NULL로 제한됩니다.
어플리케이션에서 보면 상당히 나쁜 행동이라고 생각됩니다.특히 나중에 복제를 구현하기로 선택한 경우 지속적으로 사용되도록 매우 주의해야 합니다.
SQL DB 모드를 확인합니다.
SELECT @@[GLOBAL|SESSION].sql_mode;
비어 있거나 설정되지 않은 경우 다음을 사용합니다.
SET [GLOBAL|SESSION] sql_mode='NO_AUTO_VALUE_ON_ZERO'
주의하세요! 를 사용하고 있는 경우는, 설정을 적용하려면 , 접속을 재기동할 필요가 있습니다.
따라서 예를 들어 한 DB에서 다른 DB로 데이터를 복원하는 경우 이 설정이 적용되었는지 확실하지 않은 경우 즉시 변경(연결 종료 시 재설정됨)을 사용하십시오.완료되면 0 값을 삽입합니다.이 값을 입력해도 변경되지 않습니다.sql_mode
변경되어 있습니다.
이 모드(및 기타)를 리셋하려면
SET [GLOBAL|SESSION] sql_mode=''
자동 증분 값은 MySQL 데이터베이스에서 기본값으로 설정되지 않으므로 0으로 설정하는 것이 좋습니다.
자세한 내용은 mysql dev 페이지 항목을 참조하십시오.
갱신하다
MariaDB의 경우 이 코멘트에서 지적된 명령어를 사용합니다.
SET sql_mode='NO_AUTO_VALUE_ON_ZERO'
mysql 변수를 다루고 싶지 않은 경우 유용한 해커가 있습니다.
INSERT INTO `{{TABLE_PREFIX}}users` VALUES (-1, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);
그리고 나서.
UPDATE `{{TABLE_PREFIX}}users` SET id = 0 where id = -1;
이는 테이블 ID에 음수 값을 사용하지 않고 부호 있는 정수를 사용하고 있다고 가정합니다.
Fail Safe 방법:
SET @@session.sql_mode =
CASE WHEN @@session.sql_mode NOT LIKE '%NO_AUTO_VALUE_ON_ZERO%'
THEN CASE WHEN LENGTH(@@session.sql_mode)>0
THEN CONCAT_WS(',',@@session.sql_mode,'NO_AUTO_VALUE_ON_ZERO') -- added, wasn't empty
ELSE 'NO_AUTO_VALUE_ON_ZERO' -- replaced, was empty
END
ELSE @@session.sql_mode -- unchanged, already had NO_AUTO_VALUE_ON_ZERO set
END
- sql_mode에서 NO_AUTO_VALUE_ON_ZERO가 이미 설정되어 있는지 확인합니다.
- 비어 있지 않은 경우 sql_mode에 추가합니다.
- 세션만 설정합니다. 0을 삽입해야 하는 세션에서만 사용하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/1142472/how-to-force-mysql-to-take-0-as-a-valid-auto-increment-value
'source' 카테고리의 다른 글
javascript(또는 jQuery) 사용 후 :: before 및 :: 등의 CSS 유사 요소 선택 및 조작 (0) | 2022.11.18 |
---|---|
LIMIT 오프셋에서 MySQL 함수를 사용할 수 있습니까? (0) | 2022.11.18 |
배열의 마지막 항목 가져오기 (0) | 2022.11.18 |
EC2의 Amazon RDS Aurora vs RDS MySQL vs MySQL? (0) | 2022.11.18 |
래퍼 클래스 및 프리미티브 유형을 사용해야 하는 경우 (0) | 2022.11.18 |