MySQL Tutorial이 칼럼에서는 MySQL 및 MariaDB 온라인 DDL을 소개하고 안내합니다.
개요
초기 MySQL 버전에서는 DDL 작업(예: 인덱스 생성 등)을 수행하려면 일반적으로 데이터 테이블 잠금이 필요하며 작업 중에 DML 작업이 차단되어 정상적인 비즈니스에 영향을 미칩니다. MySQL 5.6 및 MariaDB 10.0은 DML의 정상적인 실행에 영향을 주지 않고 DDL 작업을 수행할 수 있는 온라인 DDL을 지원하기 시작합니다. 온라인에서 DDL 작업을 직접 실행하는 것은 기본적으로 사용자에게 보이지 않습니다(일부 작업은 성능에 영향을 미칩니다).
다양한 데이터베이스 버전에 따라 다양한 DDL 문 지원에 일정한 차이가 있습니다. 이 문서에서는 DDL 작업을 수행해야 하는 경우 온라인 DDL 지원을 참조할 수 있습니다. 이 기사의 상황 부분.
이 기사는 계속 수정되고 업데이트될 예정입니다. 더 흥미로운 콘텐츠를 보려면 GITHUB의 프로그래머 성장 계획 프로젝트를 참조하세요.
ALTER TABLE
문에서 온라인 DDL은 ALGORITHM
및 LOCK
문을 통해 지원됩니다. ALTER TABLE
语句中,支持通过 ALGORITHM
和 LOCK
语句来实现 Online DDL:
-
ALGORITHM
- 控制 DDL 操作如何执行,使用哪个算法 -
LOCK
- 控制在执行 DDL 时允许对表加锁的级别
ALTER TABLE tab ADD COLUMN c varchar(50), ALGORITHM=INPLACE, LOCK=NONE;复制代码
ALGORITHM 支持的算法
ALGORITHM | 说明 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DEFAULT | 默认算法,自动使用可用的最高效的算法 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
COPY | 最原始的方式,所有的存储引擎都支持,不使用 Online DDL,操作时会创建临时表,执行全表拷贝和重建,过程中会写入 Redo Log 和大量的 Undo Log,需要添加读锁,非常低效 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
INPLACE | 尽可能避免表拷贝和重建,更确切的名字应该是 ENGINE 算法,由存储引擎决定如何实现,有些操作是可以立即生效的(比如重命名列,改变列的默认值等),但有些操作依然需要全表或者部分表的拷贝和重建(比如添加删除列、添加主键、改变列为 NULL 等) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NOCOPY | 该算法是 INPLACE 算法的子集,用于避免聚簇索引(主键索引)的重建造成全表重建,也就说用该算法会禁止任何引起聚簇索引重建的操作
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
INSTANT | 用于避免 INPLACE
ALTER TABLE tbl_name [WAIT n|NOWAIT] ...CREATE ... INDEX ON tbl_name (index_col_name, ...) [WAIT n|NOWAIT] ...DROP INDEX ... [WAIT n|NOWAIT]DROP TABLE tbl_name [WAIT n|NOWAIT] ...LOCK TABLE ... [WAIT n|NOWAIT]OPTIMIZE TABLE tbl_name [WAIT n|NOWAIT]RENAME TABLE tbl_name [WAIT n|NOWAIT] ...SELECT ... FOR UPDATE [WAIT n|NOWAIT]SELECT ... LOCK IN SHARE MODE [WAIT n|NOWAIT]TRUNCATE TABLE tbl_name [WAIT n|NOWAIT]复制代码 ALGORITHM 지원 알고리즘
|
INPLACE🎜 | 테이블 복사 및 재구성을 최대한 피하세요. 보다 정확한 이름은 ENGINE 알고리즘이어야 합니다. 스토리지 엔진은 이를 구현하는 방법을 결정합니다. 일부 작업(예: 열 이름 바꾸기, 열 기본값 변경 등)은 여전히 전체 테이블 또는 테이블 일부를 복사하고 다시 작성해야 합니다. 열 추가 및 삭제, 기본 키 추가, 열을 NULL로 변경 등) 🎜🎜 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NOCOPY🎜 | 이 알고리즘은 INPLACE 알고리즘의 하위 집합으로 사용됩니다. 전체 테이블을 재구성하는 클러스터형 인덱스(기본 키 인덱스)를 방지합니다. 즉, 이 알고리즘을 사용하면 클러스터형 인덱스 재구성이 금지됩니다. 🎜🎜🎜 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
INSTANT🎜 | 는 데이터 파일을 수정해야 할 때 INPLACE 알고리즘의 비정상적인 비효율성 문제를 피하기 위해 사용됩니다. 🎜관련된 모든 테이블 복사 및 재구축 작업은 금지됩니다🎜🎜🎜🎜🎜
算法使用规则:
. INSTANT 알고리즘 지원: MariaDB 10.3.2+, MySQL 8.0.12+. 알고리즘 사용 규칙:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
따라서 INPLACE는 0에서 255바이트 사이 또는 256바이트 이상 사이의 변경만 지원합니다. INPLACE에서는 VARCHAR 열 길이 감소가 지원되지 않습니다. | 7 자동 증가 컬럼 값의 변경은 데이터 파일이 아닌 메모리에 있는 수정된 값입니다 | 8 ⑨ 해당 컬럼이 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
⑬ MariaDB 10.4.3 이후 InnoDB는 열 길이를 늘리는 INSTANT 알고리즘 사용을 지원하지만 몇 가지 제한 사항이 있습니다. 자세한 내용은 열의 데이터 유형 변경 | Operation |
STORED
열 추가🎜🎜❌🎜🎜❌🎜🎜✅🎜🎜❌🎜🎜❌🎜🎜🎜 🎜 정렬 수정 STORED 열🎜🎜❌🎜🎜❌ 🎜🎜 ✅🎜🎜❌🎜🎜❌🎜🎜🎜🎜 STORED
열 삭제 🎜🎜❌🎜🎜✅🎜🎜✅🎜 🎜✅🎜🎜❌ 🎜🎜🎜🎜VIRT UAL
열 추가 🎜🎜✅🎜🎜✅🎜🎜❌🎜🎜✅🎜🎜✅🎜🎜🎜🎜VIRTUAL
열 정렬 수정🎜🎜✅ 🎜🎜❌🎜🎜✅🎜🎜❌🎜 🎜❌🎜🎜🎜🎜 VIRTUAL
열 삭제 🎜🎜✅🎜🎜✅🎜🎜❌🎜🎜✅🎜🎜✅ 🎜🎜🎜🎜🎜외래 키🎜🎜 🎜🎜🎜Operation🎜🎜INSTANT🎜 🎜INPLACE🎜🎜테이블 재구성🎜🎜 동시 DML🎜🎜메타데이터만 수정🎜🎜🎜🎜🎜🎜외래 키 제약 조건 추가🎜🎜❌🎜🎜✅ ⑭🎜🎜❌🎜🎜✅🎜🎜✅🎜 🎜🎜🎜외래 키 제약 조건 삭제🎜 🎜❌🎜🎜✅🎜🎜 ❌🎜🎜✅🎜🎜✅🎜🎜🎜🎜참고:
- ⑭ 외래 키를 추가할 때
INPLACE
알고리즘은foreign_key_checks
옵션이 비활성화된 경우에만 지원됩니다foreign_key_checks
选项被禁用的时候才支持INPLACE
算法
表
操作 | INSTANT | INPLACE | 重建表 | 并发 DML | 只修改元数据 |
---|---|---|---|---|---|
修改 ROW_FORMAT
|
❌ | ✅ | ✅ | ✅ | ❌ |
修改 KEY_BLOCK_SIZE
|
❌ | ✅ | ✅ | ✅ | ❌ |
设置持久表统计信息 | ❌ | ✅ | ❌ | ✅ | ✅ |
指定字符集 | ❌ | ✅ | ✅ ⑮ | ❌ | ❌ |
转换字符集 | ❌ | ❌ | ✅ ⑯ | ❌ | ❌ |
优化表 | ❌ | ✅ ⑰ | ✅ | ✅ | ❌ |
使用 FORCE 选项重建表 |
❌ | ✅ ⑱ | ✅ | ✅ | ❌ |
执行空的重建 | ❌ | ✅ ⑲ | ✅ | ✅ | ❌ |
重命名表 | ✅ | ✅ | ❌ | ✅ | ✅ |
说明:
- ⑮⑯ 当字符集不同时,需要重建表
- ⑰⑱⑲ 如果表中包含
FULLTEXT
的字段,则不支持 INPLACE
表空间
操作 | INSTANT | INPLACE | 重建表 | 并发 DML | 只修改元数据 |
---|---|---|---|---|---|
重命名常规表空间 | ❌ | ✅ | ❌ | ✅ | ✅ |
启用或者禁用常规表空间加密 | ❌ | ✅ | ❌ | ✅ | ❌ |
启用或者禁用 file-per-table 表空间加密 |
❌ | ❌ | ✅ | ❌ | ❌ |
限制
- 在临时表
TEMPORARY TABLE
上创建索引时会发生表拷贝 - 如果表上有
ON...CASCADE
或者ON...SET NULL
约束,则ALERT TABLE
不支持字句LOCK=NONE
- 참고:
- ⑮⑯ 문자 집합이 다른 경우 테이블은 다음과 같아야 합니다. 재구축됨
- ⑰⑱⑲ 테이블에
FULLTEXT
필드가 포함된 경우 INPLACE는 지원되지 않습니다 -
테이블 공간
작업 INSTANT INPLACE 테이블 재구축 동시 DML 메타데이터만 수정일반 테이블스페이스 이름 바꾸기 ❌ ✅ ❌✅ ✅ 일반 테이블스페이스 암호화 활성화 또는 비활성화 ❌ ✅ ❌ ✅ ❌ 파일 활성화 또는 비활성화 -테이블당
테이블 공간 암호화❌ ❌ ✅ ❌ ❌ 제한 사항
- 임시 테이블
TEMPORARY TABLE
테이블 복사
에 인덱스를 생성할 때 발생합니다. 테이블에 - ⑰⑱⑲ 테이블에
테이블
작업 | INSTANT | INPLACE | 테이블 재구성 | 동시 DML | 메타데이터만 수정 |
---|---|---|---|---|---|
ROW_FORMAT |
❌ | ✅ | ✅ | ✅ | ❌ |
수정KEY_BLOCK_SIZE
|
❌ | ✅ | ✅ | ✅ | ❌|
영구 테이블 통계 설정 | ❌ | ✅ | ❌ | ✅ | ✅ |
문자 집합 지정 | ❌ | ✅ | ✅ ⑮❌ | ❌ | |
문자 집합 변환 | ❌ | ❌✅ ⑯ | ❌ | ❌ | |
테이블 최적화 | ❌ | ✅ ⑰ | ✅ | ✅ | ❌ |
>FORCE 옵션 재구축 테이블 | ❌ | ✅ ⑱ | ✅ | ✅ | ❌ |
빈 재구축 수행 | ❌ | ✅ ⑲ | ✅ | ✅❌ | |
테이블 이름 바꾸기 | ✅ | ✅ | ❌ | ✅ | ✅ |
ON...CASCADE
또는 ON...SET NULL
제약 조건이 있는 경우 ALERT TABLE <code>LOCK=NONE
구문은 지원되지 않습니다. Onlne DDL 작업이 완료되기 전에 관련 테이블에 대한 메타데이터 잠금을 이미 보유하고 있는 트랜잭션이 커밋되거나 롤백될 때까지 기다려야 합니다. 이 프로세스에서는 관련 테이블의 새 트랜잭션이 차단되어 실행할 수 없습니다.
대형 테이블에서 테이블 재구성과 관련된 DDL을 실행할 때 다음과 같은 제한 사항이 있습니다.
온라인 DDL 작업을 일시 중지하거나 I/A를 제한하는 메커니즘이 없습니다. O 또는 온라인 DDL 작업의 CPU 사용량
작업이 실패할 경우 온라인 DDL 작업을 롤백하는 데 비용이 매우 많이 듭니다.🎜🎜더 많은 관련 무료 학습 권장사항: 🎜🎜🎜mysql 튜토리얼🎜🎜🎜(동영상)🎜🎜🎜오래 실행되는 온라인 DDL은 복제 지연을 일으킬 수 있습니다. 온라인 DDL 작업은 슬레이브에서 실행되기 전에 마스터에서 실행되어야 합니다. 이 과정에서 동시에 처리되는 DML은 DDL 작업이 실행되기 전에 슬레이브에서 완료될 때까지 기다려야 합니다. 마지막에 작성이 글은 계속 수정되고 업데이트될 예정이니 팔로우하시면 더욱 흥미로운 내용을 보실 수 있습니다.
위 내용은 참조 가이드: MySQL 및 MariaDB 온라인 DDL의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

MySQL은 초보자가 데이터베이스 기술을 배우는 데 적합합니다. 1. MySQL 서버 및 클라이언트 도구를 설치하십시오. 2. SELECT와 같은 기본 SQL 쿼리를 이해하십시오. 3. 마스터 데이터 작업 : 데이터를 만들고, 삽입, 업데이트 및 삭제합니다. 4. 고급 기술 배우기 : 하위 쿼리 및 창 함수. 5. 디버깅 및 최적화 : 구문 확인, 인덱스 사용, 선택*을 피하고 제한을 사용하십시오.

MySQL은 테이블 구조 및 SQL 쿼리를 통해 구조화 된 데이터를 효율적으로 관리하고 외래 키를 통해 테이블 간 관계를 구현합니다. 1. 테이블을 만들 때 데이터 형식을 정의하고 입력하십시오. 2. 외래 키를 사용하여 테이블 간의 관계를 설정하십시오. 3. 인덱싱 및 쿼리 최적화를 통해 성능을 향상시킵니다. 4. 데이터 보안 및 성능 최적화를 보장하기 위해 데이터베이스를 정기적으로 백업 및 모니터링합니다.

MySQL은 웹 개발에 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 주요 기능에는 다음이 포함됩니다. 1. 다른 시나리오에 적합한 InnoDB 및 MyISAM과 같은 여러 스토리지 엔진을 지원합니다. 2.로드 밸런싱 및 데이터 백업을 용이하게하기 위해 마스터 슬레이브 복제 기능을 제공합니다. 3. 쿼리 최적화 및 색인 사용을 통해 쿼리 효율성을 향상시킵니다.

SQL은 MySQL 데이터베이스와 상호 작용하여 데이터 첨가, 삭제, 수정, 검사 및 데이터베이스 설계를 실현하는 데 사용됩니다. 1) SQL은 Select, Insert, Update, Delete 문을 통해 데이터 작업을 수행합니다. 2) 데이터베이스 설계 및 관리에 대한 생성, 변경, 삭제 문을 사용하십시오. 3) 복잡한 쿼리 및 데이터 분석은 SQL을 통해 구현되어 비즈니스 의사 결정 효율성을 향상시킵니다.

MySQL의 기본 작업에는 데이터베이스, 테이블 작성 및 SQL을 사용하여 데이터에서 CRUD 작업을 수행하는 것이 포함됩니다. 1. 데이터베이스 생성 : createAbasemy_first_db; 2. 테이블 만들기 : CreateTableBooks (idintauto_incrementprimarykey, titlevarchar (100) notnull, authorvarchar (100) notnull, published_yearint); 3. 데이터 삽입 : InsertIntobooks (Title, Author, Published_year) VA

웹 응용 프로그램에서 MySQL의 주요 역할은 데이터를 저장하고 관리하는 것입니다. 1. MySQL은 사용자 정보, 제품 카탈로그, 트랜잭션 레코드 및 기타 데이터를 효율적으로 처리합니다. 2. SQL 쿼리를 통해 개발자는 데이터베이스에서 정보를 추출하여 동적 컨텐츠를 생성 할 수 있습니다. 3.mysql은 클라이언트-서버 모델을 기반으로 작동하여 허용 가능한 쿼리 속도를 보장합니다.

MySQL 데이터베이스를 구축하는 단계에는 다음이 포함됩니다. 1. 데이터베이스 및 테이블 작성, 2. 데이터 삽입 및 3. 쿼리를 수행하십시오. 먼저 CreateAbase 및 CreateTable 문을 사용하여 데이터베이스 및 테이블을 작성한 다음 InsertInto 문을 사용하여 데이터를 삽입 한 다음 최종적으로 SELECT 문을 사용하여 데이터를 쿼리하십시오.

MySQL은 사용하기 쉽고 강력하기 때문에 초보자에게 적합합니다. 1.MySQL은 관계형 데이터베이스이며 CRUD 작업에 SQL을 사용합니다. 2. 설치가 간단하고 루트 사용자 비밀번호를 구성해야합니다. 3. 삽입, 업데이트, 삭제 및 선택하여 데이터 작업을 수행하십시오. 4. Orderby, Where and Join은 복잡한 쿼리에 사용될 수 있습니다. 5. 디버깅은 구문을 확인하고 쿼리를 분석하기 위해 설명을 사용해야합니다. 6. 최적화 제안에는 인덱스 사용, 올바른 데이터 유형 선택 및 우수한 프로그래밍 습관이 포함됩니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

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

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

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