MySQL 설정 only_full_group_by의 오류 보고 문제를 자세히 설명하는 기사
개발 환경은 mysql5.6
에 연결되어 있고, 테스트 환경은 mysql5.7
에 연결되어 있습니다. 개발 중에 친구가 group by
에 대한 sql
문을 작성했습니다. 개발 환경에서는 정상적으로 실행되지만, 테스트 환경에서는 예외가 발견됩니다. mysql5.6
,而测试环境是 mysql5.7
。开发中有小伙伴写了有关 group by
的 sql
语句。在开发环境中运行是正常的,而到了测试环境中就发现了异常。
原因分析:MySQL5.7
版本默认设置了 mysql sql_mode = only_full_group_by
属性,导致报错。
其中 ONLY_FULL_GROUP_BY
就是造成这个错误的罪魁祸首了,在这种严格模式下,对于 group by
聚合操作,若在 select
中的列没有在group by
中出现,那么这个 SQL
就是不合法的。因为开发写的 sql
中,select
列不在 group by
从句中,在使用 group by
时就会报错。
测试环境下载安装的是最新版的 mysql5.7.x
版本,默认是开启了 only_full_group_by
模式的。
1. 查看 sql_mode
SELECT` `@@sql_mode;
查询出来的值为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2. 去掉ONLY_FULL_GROUP_BY,重新设置值。
SET` `@@``global``.sql_mode =``'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'``;
3. 上面是改变了全局sql_mode,对于新建的数据库有效。
对于已存在的数据库,则需要在对应的数据下执行
SET` `sql_mode =``'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'``;
以上方法mysql数据库重启后依然无效,下列方式重启后依然生效
找到 MySQL
的配置文件,在 linux
系统上 /etc/my.cnf
文件,查询 sql_mode
字段,我并没有在配置文件中找到这个关键字,所以我手动添加进去:
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
需要注意的一点是一定要添加在 [mysqld]
配置内,这样添加完后重启mysql
才会生效,退出数据库:exit,重启命令:
service mysqld restart #lnmp重启mysql lnmp restart mysql
刷新页面报错信息消失成功解决,再次连接上数据库查看 sql_mode
配置 select @@sql_mode
:
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
到此这篇关于 Mysql5.7
及以上版本 ONLY_FULL_GROUP_BY
报错的解决方法的文章就介绍到这了,更多相关 Mysql5.7 ONLY_FULL_GROUP_BY
원인 분석: MySQL5.7
버전에는 기본적으로 mysql sql_mode = only_full_group_by
속성이 설정되어 있어 오류가 발생합니다.
ONLY_FULL_GROUP_BY
가 이 엄격 모드에서 group by
집계 작업에 대해 select
에 있는 경우입니다. 의 열이 group by
에 나타나지 않으면 이 SQL
은 불법입니다. 개발자가 작성한 sql
에는 group by
를 사용할 때 group by
절에 select
열이 없기 때문입니다. 코드> 오류를 보고합니다. 테스트 환경은 최신 버전의 mysql5.7.x
를 다운로드하여 설치했습니다. only_full_group_by
모드가 기본적으로 활성화되어 있습니다.
1. sql_mode를 확인하세요
rrreee
쿼리된 값은ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_C REATE_입니다. USER,NO_ENGINE_SUBSTITUTION
2. ONLY_FULL_GROUP_BY를 제거하고 값을 재설정하세요. .
rrreee
3. 위의 내용은 새로 생성된 데이터베이스에 유효한 전역 sql_mode를 변경합니다.
기존 데이터베이스의 경우 해당 데이터 아래에서 실행해야 합니다rrreee위의 방법은 mysql 데이터베이스를 다시 시작한 후에도 여전히 유효하지 않으며, 다음 방법은 다시 시작한 후에도 여전히 유효합니다
MySQL
파일, linux
시스템의 /etc/my.cnf
파일에서 sql_mode
필드를 쿼리합니다. 구성 파일에서 이 키워드를 찾을 수 없어서 수동으로 추가했습니다. 🎜rrreee🎜한 가지 주의할 점은 [mysqld]
구성에 추가해야 하므로 추가한 후 다시 시작하세요. mysql
이 적용되고 종료됩니다. 데이터베이스: 종료, 다시 시작 명령: 🎜rrreee🎜페이지를 새로 고치면 오류 메시지가 사라지고 성공적으로 해결됩니다. sql_mode code>를 구성하세요. SQL_mode의 참조: 🎜🎜🎜ONLY_FULL_GROUP_BY: GROUP BY 집계 작업의 경우 SELECT의 열이 GROUP BY에 나타나지 않으면 열이 GROUP BY 절에 없기 때문에 이 SQL은 유효하지 않습니다🎜🎜NO_AUTO_VALUE_ON_ZERO : 이 값은 자동 증가 열의 삽입에 영향을 줍니다. 기본 설정에서 0 또는 NULL을 삽입하면 다음 자동 증가 값이 생성되는 것을 나타냅니다. 이 옵션은 사용자가 0 값을 삽입하려고 하고 열이 자동 증가하는 경우 유용합니다. 🎜🎜STRICT_TRANS_TABLES: 이 모드에서는 트랜잭션 테이블에 값을 삽입할 수 없으면 현재 작업이 중단되고 비 트랜잭션 테이블에는 제한이 없습니다. 🎜🎜NO_ZERO_IN_DATE: 엄격 모드에서는 날짜와 월이 지정됩니다. not allowed to be zero🎜 🎜NO_ZERO_DATE: 이 값을 설정하면 mysql 데이터베이스는 0 날짜 삽입을 허용하지 않으며 0 날짜를 삽입하면 경고 대신 오류가 발생합니다. 🎜🎜ERROR_FOR_DIVISION_BY_ZERO: INSERT 또는 UPDATE 중에 데이터를 0으로 나누면 경고 대신 오류가 생성됩니다. 모드가 지정되지 않은 경우 데이터가 0으로 나누어지면 MySQL은 NULL을 반환합니다. 🎜🎜NO_AUTO_CREATE_USER: GRANT가 빈 비밀번호를 사용하여 사용자를 생성하지 못하도록 합니다. 🎜🎜NO_ENGINE_SUBSTITUTION: 필요한 스토리지 엔진이 비활성화되거나 컴파일되지 않은 경우 오류가 발생합니다. 이 값이 설정되지 않으면 기본 스토리지 엔진이 대신 사용되며 예외가 발생합니다. 🎜🎜PIPES_AS_CONCAT: "||"를 OR 연산자 대신 문자열 연결 연산자로 처리합니다. 문자열 연결 함수 Concat🎜🎜ANSI_QUOTES: ANSI_QUOTES를 활성화한 후에는 식별자로 해석되므로 큰따옴표를 사용하여 문자열을 인용할 수 없습니다. 🎜🎜추천 학습: "🎜MySQL 비디오 튜토리얼🎜"🎜🎜
위 내용은 MySQL 설정 only_full_group_by의 오류 보고 문제를 자세히 설명하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











MySQL 데이터베이스에서 사용자와 데이터베이스 간의 관계는 권한과 테이블로 정의됩니다. 사용자는 데이터베이스에 액세스 할 수있는 사용자 이름과 비밀번호가 있습니다. 권한은 보조금 명령을 통해 부여되며 테이블은 Create Table 명령에 의해 생성됩니다. 사용자와 데이터베이스 간의 관계를 설정하려면 데이터베이스를 작성하고 사용자를 생성 한 다음 권한을 부여해야합니다.

MySQL은 설치가 간단하고 강력하며 데이터를 쉽게 관리하기 쉽기 때문에 초보자에게 적합합니다. 1. 다양한 운영 체제에 적합한 간단한 설치 및 구성. 2. 데이터베이스 및 테이블 작성, 삽입, 쿼리, 업데이트 및 삭제와 같은 기본 작업을 지원합니다. 3. 조인 작업 및 하위 쿼리와 같은 고급 기능을 제공합니다. 4. 인덱싱, 쿼리 최적화 및 테이블 파티셔닝을 통해 성능을 향상시킬 수 있습니다. 5. 데이터 보안 및 일관성을 보장하기위한 지원 백업, 복구 및 보안 조치.

데이터 통합 단순화 : AmazonRdsMysQL 및 Redshift의 Zero ETL 통합 효율적인 데이터 통합은 데이터 중심 구성의 핵심입니다. 전통적인 ETL (추출, 변환,로드) 프로세스는 특히 데이터베이스 (예 : AmazonRDSMySQL)를 데이터웨어 하우스 (예 : Redshift)와 통합 할 때 복잡하고 시간이 많이 걸립니다. 그러나 AWS는 이러한 상황을 완전히 변경 한 Zero ETL 통합 솔루션을 제공하여 RDSMYSQL에서 Redshift로 데이터 마이그레이션을위한 단순화 된 거의 실시간 솔루션을 제공합니다. 이 기사는 RDSMYSQL ZERL ETL 통합으로 Redshift와 함께 작동하여 데이터 엔지니어 및 개발자에게 제공하는 장점과 장점을 설명합니다.

MySQL 사용자 이름 및 비밀번호를 작성하려면 : 1. 사용자 이름과 비밀번호를 결정합니다. 2. 데이터베이스에 연결; 3. 사용자 이름과 비밀번호를 사용하여 쿼리 및 명령을 실행하십시오.

1. 올바른 색인을 사용하여 스캔 한 데이터의 양을 줄임으로써 데이터 검색 속도를 높이십시오. 테이블 열을 여러 번 찾으면 해당 열에 대한 인덱스를 만듭니다. 귀하 또는 귀하의 앱이 기준에 따라 여러 열에서 데이터가 필요한 경우 복합 인덱스 2를 만듭니다. 2. 선택을 피하십시오 * 필요한 열만 선택하면 모든 원치 않는 열을 선택하면 더 많은 서버 메모리를 선택하면 서버가 높은 부하 또는 주파수 시간으로 서버가 속도가 느려지며, 예를 들어 Creation_at 및 Updated_at 및 Timestamps와 같은 열이 포함되어 있지 않기 때문에 쿼리가 필요하지 않기 때문에 테이블은 선택을 피할 수 없습니다.

데이터베이스 산 속성에 대한 자세한 설명 산 속성은 데이터베이스 트랜잭션의 신뢰성과 일관성을 보장하기위한 일련의 규칙입니다. 데이터베이스 시스템이 트랜잭션을 처리하는 방법을 정의하고 시스템 충돌, 전원 중단 또는 여러 사용자의 동시 액세스가 발생할 경우에도 데이터 무결성 및 정확성을 보장합니다. 산 속성 개요 원자력 : 트랜잭션은 불가분의 단위로 간주됩니다. 모든 부분이 실패하고 전체 트랜잭션이 롤백되며 데이터베이스는 변경 사항을 유지하지 않습니다. 예를 들어, 은행 송금이 한 계정에서 공제되지만 다른 계정으로 인상되지 않은 경우 전체 작업이 취소됩니다. BeginTransaction; updateAccountssetBalance = Balance-100WH

Navicat 자체는 데이터베이스 비밀번호를 저장하지 않으며 암호화 된 암호 만 검색 할 수 있습니다. 솔루션 : 1. 비밀번호 관리자를 확인하십시오. 2. Navicat의 "비밀번호 기억"기능을 확인하십시오. 3. 데이터베이스 비밀번호를 재설정합니다. 4. 데이터베이스 관리자에게 문의하십시오.

sqllimit 절 : 쿼리 결과의 행 수를 제어하십시오. SQL의 한계 절은 쿼리에서 반환 된 행 수를 제한하는 데 사용됩니다. 이것은 대규모 데이터 세트, 페이지 진화 디스플레이 및 테스트 데이터를 처리 할 때 매우 유용하며 쿼리 효율성을 효과적으로 향상시킬 수 있습니다. 구문의 기본 구문 : SelectColumn1, Collect2, ... Fromtable_namelimitnumber_of_rows; 번호_of_rows : 반환 된 행 수를 지정하십시오. 오프셋이있는 구문 : SelectColumn1, Column2, ... Fromtable_namelimitOffset, number_of_rows; 오프셋 : skip
