MySQL의 여러 업데이트
한 번에 여러 행을 삽입할 수 있다는 것을 알고 있는데, MySQL에서 한 번에 여러 행을 업데이트할 수 있는 방법이 있나요(예: 하나의 쿼리에서)?
편집 예를 들어 다음과 같습니다.
Name id Col1 Col2
Row1 1 6 1
Row2 2 2 3
Row3 3 9 5
Row4 4 16 8
다음 모든 업데이트를 하나의 쿼리로 결합하고 싶습니다.
UPDATE table SET Col1 = 1 WHERE id = 1;
UPDATE table SET Col1 = 2 WHERE id = 2;
UPDATE table SET Col2 = 3 WHERE id = 3;
UPDATE table SET Col1 = 10 WHERE id = 4;
UPDATE table SET Col2 = 12 WHERE id = 4;
363
17
39 의 가능한 - 삽입하십시오 that& 그러하너라 사용할 수 있습니다. 복제본임을 대한 주요 업데이트하십시오.
사용 예제:
이후 동적임 값뿐만 사용하는 데 필요한 경우 가지고 있는 경우 또는 열을 대한 업데이트되어야. 하지만 it gets 좀 추악한 노력해야 합니다.
예를 들어, 사용 할 수 있는 it like: < pre>; 테이블 세트 케이스 id = 업데이트하십시오 Col1 그 때 1 1 그 때 2 2 그 후 10 시 4 다른 Col1 끝 Col2 = 케이스 id 그 때 3 3 그 때 12 4 다른 Col2 END 여기서 id 인 (1, 2, 3, 4). < /pre>;
문제는 아직 I&; d # 39 세) 등 다른 답을 항목를 확대할 수 있는.
내 말은, 마무리를 지을 수 있는 가장 쉬운 방법은 바로 여러 쿼리합니다 트랜잭션입니다. '이 수락됨 오토메이티드 삽입하십시오. 하지만 한 가지 중요한 일 '은 좋은 복제본임을 업데이트하십시오 해킹, 그 단점 및 한계에는 점에 유의해야 합니다.
I made 3 '의 성능 테스트 등 일부 제안됩니다 삽입하십시오 만든다. 변형, 변형, 사건 때 함께 '의 주요 업데이트하십시오 복제본임을 " / / then". 조항 및 소박한 방식으로 트랜잭션입니다. [Here] 파이썬 코드 및 결과를 얻을 수 있습니다 (https://gist.github.com/imankulov/5849790). 전체적인 결론을 내릴 수 있는 것으로 드러날 경우 기술서임을 에로남이네 변형 등 2 가지의 it& # 39 의 두 배 빨리 상당히 어려운 코드를 작성할 수 있지만, 그래서 개인적으로 가장 정확하고 분사 안전하다구요 외곽진입 일이다. flexlm*용 트랜잭션입니다.
또 다른 유용한 옵션은 왜 아직 확실하지 않았다.
다음 모든 InnoDB 적용됩니다.
기분이 속도용으로 3 가지 방법을 아는 것이 중요합니다.
3 가지 방법:
실행할 수 있는 시간이 아직 트랜잭션 방법은 각 개별적으로 메모리에 배치, 또는 결과를 쿼리하지 않더라도 뭔가 실행하는 동안. 꽤 비싼 트랜잭션 방법은 또한 모두 복제 및 쿼리하지 로깅합니다.
그래서 일반적으로 최고의 그리고 가장 편리한 방법은 모두 삽입하십시오 느낍니다. 크기가 작은 쿼리합니다 쉽게 읽을 수 있는 유일한 시행하십시오 쿼리하지 1 위로 및 작업. Innodb 및 MyISAM 이 모두 적용됩니다.
문제는 해결책 제시 비사양 기본 필드 삽입하십시오 일시적으로 선반가공 끕니까 관련 sql 모드: '설정 세션 sql_mode = REPLACE (바꾸기 (@@SESSION.sql_mode, ", STRICT_TRANS_TA BLES", " ";), " STRICT_AL " " L_TABLES";;;)'. '어떻게' 첫 계획이면 sql_mode smartupdate 저장할 수 있습니다.
39 로 I& 다른 의견을 말하는 방법을 사용하여, ve seen that I 테스트되었습니다 auto_increment 올라간다 삽입하십시오 않을 경우 너무 및 것으로 보인다.
테스트 코드를 실행하십시오 이렇다. 또한 php 파일을 출력입니다 지스크라 지루려면 오버헤드에 인터프리터
임시 테이블을 사용하여
이 정도면 충분할 겁니다.
여러 테이블에 대한 참조는 MySQL 매뉴얼에 있습니다.
왜 아무도 쿼리하지 한 여러 명령문입니다 하라님의 ?
Php 에서 사용하는 방법을 multi_query ',' 미스크리 인스턴스입니다.
1 의 [php 수작업식] >. MySQL 선택적으로 사용하면 여러 개 명령문입니다 한 기술서임을 구체화하십시오. 하지만 한 번에 여러 차례 보내는 제표를 낮춰줍니다 클라이언트-서버 라운드하지 특수 처리가 필요합니다.
다음은 비교한 결과 다른 방법으로 3 업데이트 30,000 기초형상. Here 코드를 기반으로 하는 @Dakusan 답을 찾을 수 있습니다.
보시는 바와 같이 여러 명령문입니다 질의입니다 비해 보다 효율적인 최고 대답.
오류 메시지가 나타날 경우 다음과 같습니다.
Mysql 에서 할 수 있습니다 '는' 내 'max_allowed_packet 증가되지는 구성 파일 시스템에 있는 mysqld /etc/mysql/my.cnf' 다시 시작합니다.
같은 날 비난할 수 있습니다, s # 39 표를 앨리어스가 id& 운영까지도 삽입하려면 승인자 (행 단위 수행할 경우 업데이트:
또한, 다른 테이블의 업데이트 할 수 있는 것 또한 명백하네 잘 알려져 있다. 이 경우 업데이트 역할도 수행하는 " SELECT"; 기술서임을 틀렸다니까 specifying 테이블에서 데이터를 제공합니다. 따라서 두 번째 표 값을 업데이트 한다는 틀렸다니까 명시적으로 쿼리하지 환경의 영향을 받지 않습니다.
39, & # 39 라는 멀티 statement& 좁히어 가 설정을 변경할 수 있습니다. # 39, & # 39 에 있는 MySQL& 비활성화합니다 안전 mechanism& # 39. (두 개 이상의 것을 막기 위해 구현됩니까 사출 함장님이요 # 39, & # 39 의 일반적인 MySQL& brilliant& # 39. 또 효율적인 구현 하는 것을 준비되기까지 질의입니다.
여기 (http://dev.mysql.com/doc/refman/5.1/en/mysql-set-server-option.html) 는 일부 정보는 C 의 구현이 설정값입니다.
39 you& PHP 사용 할 경우, re 멀티 명령문입니다 미스크리 사용할 수 있습니다 (php 는 이제 함께 한동안 미스크리 생쥐라.)
도움이 되길 바란다.
업데이트에 조인을 사용하는 것도 가능할 수 있습니다.
편집: 업데이트하려는 값이 데이터베이스의 다른 곳에서 가져오지 않는 경우 여러 업데이트 쿼리를 실행해야 합니다.
사용
참고:
다음은 한 테이블의 모든 행을 업데이트합니다.
다음은 열2의 값이 5보다 큰 모든 행을 업데이트합니다.
둘 이상의 테이블을 업데이트하는 예제는 모두 Unkwntech의 예제입니다.
Update sql 삽입 키를 사용하여 복제본임을 그러하너라 .it 사용할 수 있는 것이다. 문법: 삽입하십시오 table_name (a, b,c) 값 (1.2,3), (4.5,6) 키 값 (a) 의 값을 a = b = 복제본임을 업데이트하십시오 (b), c = 값 (c)
Php 나 있는 이런게야. 이를 통해 사용 후 세미콜론 분할합니다 어레이입니다 제출됩니다 루프지
이렇게 하면 어떤 you& 이룹니까 # 39, r 찾고 있습니다. # 39 더 추가하기만 id&, s. 나는 테스트됨 거잖나.
방금 php 같은 건물 안에서 //
업데이트할 수 있도록 구멍을 통해 쿼리하지 한 표