MySQL 큰 테이블 에 열 을 추가 합 니 다.
이전 버 전의 MySQL 에 열 을 추가 하 는 방법:
ALTER TABLE ADD COLUMN char(128);
잠 금 표를 만 들 수 있 습 니 다.간단 한 과정 은 다음 과 같 습 니 다.ALTER TABLE ADD COLUMN char(128)
MySQL 5.6(포함 되 지 않 음)이전 버 전에 대해 트리거 를 통 해 한 표 의 업 데 이 트 를 다른 표 에 반복 하고 데이터 동기 화 를 진행 합 니 다.데이터 동기 화가 완료 되면 업무 상 표 이름 을 새 표 로 수정 하여 발표 합 니 다.업 무 는 중단 되 지 않 습 니 다.트리거 설정:
create trigger person_trigger_update AFTER UPDATE on for each row
begin set @x = "trigger UPDATE";
Replace into SELECT * from where .id = .id;
END IF;
end;
MySQL 5.6(포함)이후 버 전 은 온라인 DDL 기능 을 도 입 했 습 니 다.
Alter table , ALGORITHM [=] {DEFAULT|INSTANT|INPLACE|COPY}, LOCK [=] { DEFAULT| NONE| SHARED| EXCLUSIVE }
매개 변수:ALGORITHM:
참고 문서:
MySQL 5.6: https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-operations.htmlMySQL
5.7: https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.htmlMySQL
8.0: https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html
통과 가능:
ALTER TABLE ADD COLUMN char(128), ALGORITHM=INSTANT, LOCK=NONE;
유사 한 문 구 는 온라인 증가 필드 를 실현 합 니 다.ALGORITHM 과 LOCK 을 명 확 히 하 는 것 이 좋 습 니 다.이렇게 DDL 을 수행 할 때 온라인 업무 에 얼마나 큰 영향 을 미 치 는 지 명확 하 게 알 수 있 습 니 다.동시에 온라인 DDL 을 실행 하 는 과정 은 다음 과 같 습 니 다.
이 를 통 해 알 수 있 듯 이 시작 단계 에 metadata lock 이 필요 하 다.metadata lock 은 5.5 에 야 my sql 에 도입 되 었 고 이전에 도 메타 데 이 터 를 보호 하 는 체제 가 있 었 으 나 metadata lock 개념 을 명확 하 게 제시 하지 않 았 을 뿐이다.그러나 5.5 이전 버 전(예 를 들 어 5.1)과 5.5 이후 버 전 은 메타 데 이 터 를 보호 하 는 데 현저 한 차이 점 이 있다.5.1 메타 데이터 에 대한 보 호 는 구문 등급 이 고 5.5 메타 데이터 에 대한 보 호 는 사무 등급 이다.구문 단계 란 구문 이 실 행 된 후에 업무 가 제출 되 거나 스크롤 백 되 든 그 표 구 조 는 다른 세 션 에 의 해 업 데 이 트 될 수 있 습 니 다.트 랜 잭 션 단 계 는 트 랜 잭 션 이 끝 난 후에 야 metadata lock 을 방출 합 니 다.
metadata lock 을 도입 한 후에 주로 두 가지 문 제 를 해결 했다.하 나 는 사무 격 리 문제 이다.예 를 들 어 중복 격 리 가능 한 단계 에서 세 션 A 는 2 번 조회 하 는 동안 세 션 B 가 표 구 조 를 수정 하면 두 번 조회 결과 가 일치 하지 않 고 중복 읽 을 수 있 는 요 구 를 만족 시 킬 수 없다.또 하 나 는 데이터 복사 문제 입 니 다.예 를 들 어 세 션 A 가 여러 개의 업데이트 문 구 를 실행 하 는 동안 다른 세 션 B 가 표 구조 변경 을 하고 먼저 제출 하면 slave 가 다시 할 때 alter 를 다시 한 다음 에 update 를 다시 할 때 복사 오류 가 발생 할 수 있 습 니 다.
만약 현재 많은 업무 가 실행 되 고 있 고 큰 조 회 를 포함 하 는 업무 가 있다 면,예 를 들 어:
START TRANSACTION;
select count(*) from
이런 유사 한 것 은 비교적 긴 시간 동안 업 무 를 수행 할 수도 있 고 막 을 수도 있다.그래서 원칙적으로:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.