>  기사  >  데이터 베이스  >  mysql의 업데이트 문은 무엇을 반환합니까?

mysql의 업데이트 문은 무엇을 반환합니까?

WBOY
WBOY원래의
2022-05-19 16:24:027729검색

mysql의 업데이트 문의 반환 결과: 1. 데이터베이스 URL에 "useAffectedRows=true" 매개변수가 없으면 일치하는 행 수가 반환됩니다. 2. "useAffectedRows=true" 매개변수가 있는 경우; 데이터베이스 URL, 영향을 받은 행이 숫자로 반환됩니다.

mysql의 업데이트 문은 무엇을 반환합니까?

이 튜토리얼의 운영 환경: windows10 시스템, mysql8.0.22 버전, Dell G3 컴퓨터.

mysql의 업데이트 문은 무엇을 반환하나요?

업데이트 문의 결과는 무엇인가요? 아니면 행 수에 영향을 줍니까?

먼저 결과에 대해 이야기해 보겠습니다. 데이터베이스의 URL이

jdbc:mysql://gitlab.fzghjx.com:3306/cron

인 경우 반환되는 결과는 일치하는 행 수(일치하는 행)입니다.

다음과 같은 경우:

jdbc:mysql://gitlab.fzghjx.com:3306/cron?useAffectedRows=true

이면 영향을 받은 행(변경됨) 수가 반환됩니다.

요약하자면:

url에 useAffectedRows=true 매개변수가 없으면 일치하는 행 수가 반환됩니다. 그렇다면 영향을 받은 행 수가 반환됩니다.

반환 값을 영향을 받은(변경된) 레코드 수로 만드는 방법은 무엇입니까?

mysql 데이터 연결 URL 매개변수에 useAffectedRows=true만 추가하면 됩니다

jdbc.url=jdbc:mysql://localhost:3306/ssm?useAffectedRows=true

확장 지식:

Guess

cmd를 통해 mysql 업데이트 문을 조작하면 실제로 화면은 다음과 같습니다.

이 질문에 대해 생각해 보면 우선 두 가지 대답이 있습니다. 1. mysql 서버의 반환 결과에서 판단하십시오. 이것이 true로 설정되면, false이면 일치하는 행의 값을 반환합니다. 이면 Changed 값이 반환됩니다. 2. 쿼리 문으로 돌아갈 때 이 값을 선택합니다.

확인됨

연결을 만드는 전체 과정을 설명하는 사진을 빌려주세요:

(사진 출처: https://blog.csdn.net/c929833623lvcha/article/details/44517245 )

한동안 조사한 결과 이 ​​두 가지 생각이 모두 틀렸다는 것을 알게 되었습니다. 구체적으로:

간단한 jdbc 쿼리를 작성했습니다.

1, 연결 설정

소스 코드에 따르면 추적에 따르면 mysql이 연결을 설정할 때 useAffectedRows=true 매개변수가 사용됩니다. 연결의 속성으로.

Connection connection = DriverManager.getConnection("jdbc:mysql://gitlab.fzghjx.com:3306/cron?useAffectedRows=true", "root", "root");

에서 다음을 따르세요.

계속: 연결 방법은 java.sql.Driver#connect, 구현은 com.mysql.jdbc.NonRegisteringDriver#connect

useAffectedRows=true입니다. com.mysql.jdbc.NonRegisteringDriver#parseURL 메소드에서 읽고 Properties 소품에 설정합니다.

더 아래로: com.mysql.jdbc.ConnectionImpl#getInstance 연결 인스턴스를 가져옵니다

여기 반사가 있으며 인수는 JDBC_4_CONNECTION_CTOR JDBC 생성자가 사용됩니다.

J DBC는 생성자는

public JDBC4Connection(String hostToConnectTo, int portToConnectTo, Properties info, String databaseToConnectTo, String url) throws SQLException {
    super(hostToConnectTo, portToConnectTo, info, databaseToConnectTo, url);
}

찾아보세요. ConnectionImp의 생성자입니다.

(그런데: 트랜잭션의 격리 수준은 여기에서 2로 설정되고 읽기는 커밋됩니다.)

이 구성에서는 함수에서 useAffectedRows 값은 연결로 초기화됩니다.

설정할 속성은 206개이며 useAffectedRows 순위는 190위입니다(mysql-connect-java 버전에 따라 위치가 다름).

설정 완료 후:

2, MysqlIO 생성

속성 설정 후, MysqlIO 생성:

"고가용성" 옵션이 있는 경우 재시도 IO 링크가 생성됩니다. 그렇지 않으면 한 번만 시도하고 실패해도 재시도하지 않는 IO 링크를 만듭니다. 이 옵션은 autoReconnect=true를 설정하여 URL에서도 활성화됩니다.

3. msyql 서버와의 핸드셰이크 연결

연결 IO 프로세스는 실제로 MysqlIO를 생성한 다음 핸드셰이크를 시작하는 것입니다.

여기에 핵심 사항이 있습니다. doHandshake 메서드에서 useAffectedRows 옵션이 설정됩니다. com.mysql.jdbc.MysqlIO#doHandshake)

이 CLIENT_FOUND_ROWS의 값은

즉, 하위 비트의 끝에서 두 번째 숫자 값이 또는 작업에 사용됩니다. useAffectsRows의 경우 또는 작업이 수행되지 않습니다.

설정 후 mysqlOutput 소켓을 통해 mysql 서버로 보냅니다.

mysql출력 소스: MysqlIO가 빌드될 때 생성됩니다.

알겠습니다. 과정은 간단합니다. 다음으로 tcp 메시지를 살펴보겠습니다:

4, 메시지 분석:

useAffectedRows=true:

mysql 서버에 요청 보내기:

mysql 서버의 응답:

useAffectedRows=false:

mysql 서버에 요청 보내기:

mysql 서버의 응답:

위 메시지에서 볼 수 있는 것은 useAffectedRows는 참이고 거짓입니다. msyql 서버의 반환 값이 다릅니다. 마지막으로 jdbc에서 얻은 반환 결과는 메시지의 Affected Rows 값입니다. msyql의 결과에서 직접 얻은 jdbc는 결과에 대해 일부 구문 분석 및 필터링을 수행합니다. 이는 초기 추측이 틀렸다는 것을 증명합니다.

추천 학습: mysql 비디오 튜토리얼

위 내용은 mysql의 업데이트 문은 무엇을 반환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.