🎜🎜새 테이블을 생성할 때 다음을 추가할 수 있습니다. ENGINE 키워드는 새 테이블의 스토리지 엔진을 설정합니다. 🎜
insert into product values(1, "apple","3.5"),(2,"banana","4.2"),(3,"melon","1.2");复制代码
로그인 후 복사
로그인 후 복사
🎜🎜🎜🎜🎜위 그림에서는 MyISAM의 스토리지 엔진을 지정했습니다. 🎜🎜테이블의 스토리지 엔진을 모른다면? show create table을 통해 보실 수 있습니다 🎜🎜🎜🎜🎜🎜스토리지 엔진을 지정하지 않으면 MySQL 5.1 버전부터 MySQL의 기본 내장 스토리지 엔진은 이미 InnoDB입니다. 테이블을 만들고 살펴보세요🎜🎜🎜🎜🎜🎜위 그림과 같이 기본 스토리지 엔진을 지정하지 않았습니다. 아래 표를 확인하세요🎜🎜🎜🎜🎜🎜기본 저장공간인 것을 알 수 있습니다 엔진은 InnoDB입니다. 🎜🎜스토리지 엔진을 교체하려면 🎜
create view v1 as select * from product;复制代码
로그인 후 복사
로그인 후 복사
🎜를 사용하여 교체하면 됩니다. 교체가 완료되면 🎜0개의 행이 영향을 받음🎜이 표시되지만 실제로는 작업이 성공했습니다🎜🎜🎜🎜 🎜🎜show create table을 사용합니다. 테이블의 SQL을 확인하면 알 수 있습니다🎜🎜🎜🎜🎜🎜🎜스토리지 엔진 특성🎜🎜다음은 일반적으로 사용되는 여러 스토리지 엔진과 기본 특성을 소개합니다. 이러한 스토리지 엔진은 **MyISAM, InnoDB, MEMORY AND MERGE**🎜입니다.
MyISAM
버전 5.1 이전에는 MyISAM이 MySQL의 기본 스토리지 엔진이었습니다. MyISAM은 동시성이 낮았고 사용된 시나리오가 적었습니다.
는 트랜잭션 작업을 지원하지 않으며 ACID 기능은 더 이상 존재하지 않으며 이 디자인은 성능과 효율성을 위한 것입니다. 事务操作,ACID 的特性也就不存在了,这一设计是为了性能和效率考虑的。
는 외래 키 작업을 지원하지 않습니다. 강제로 외래 키를 추가하면 MySQL은 오류를 보고하지 않지만 외래 키는 작동하지 않습니다.
MyISAM의 기본 잠금 세분성은 테이블 수준 잠금이므로 동시성 성능이 상대적으로 낮고 잠금이 더 빠르며 잠금 충돌이 적고 교착 상태가 발생할 가능성이 적습니다. . 🎜🎜🎜MyISAM은 디스크에 세 개의 파일을 저장합니다. 파일 이름과 테이블 이름은 동일하며 확장자는 .frm(저장 테이블 정의), .MYD입니다. (MYData, 스토어 데이터), MYI(MyIndex, 스토어 인덱스). 여기서 특별한 주의가 필요한 점은 MyISAM이 인덱스 파일만 캐시하고 데이터 파일은 캐시하지 않는다는 것입니다. 🎜🎜🎜MyISAM에서 지원하는 인덱스 유형에는 글로벌 인덱스(전체 텍스트), B-트리 인덱스, R-트리 인덱스가 있습니다. code >🎜🎜전체 텍스트 인덱스: 텍스트에 대한 퍼지 쿼리의 효율성이 낮은 문제를 해결하는 것으로 보입니다. 🎜🎜B-Tree 인덱스: 모든 인덱스 노드는 균형 트리의 데이터 구조에 따라 저장되며, 모든 인덱스 데이터 노드는 리프 노드에 위치합니다. 🎜🎜R-Tree 인덱스: B-Tree 인덱스와는 저장 방식이 다소 다릅니다. 주로 공간 및 다차원 데이터를 저장하는 필드 인덱싱에 사용하도록 설계되었습니다. 현재 MySQL 버전은 인덱싱을 위해 기하학 유형 필드만 지원하며, RTREE의 장점은 범위 검색입니다. 🎜🎜🎜데이터베이스가 위치한 호스트가 다운되면 MyISAM 데이터 파일이 쉽게 손상되어 복구가 어렵습니다. 🎜🎜🎜추가, 삭제, 수정 및 쿼리 성능: SELECT는 더 높은 성능을 가지며 쿼리가 많은 상황에 적합합니다🎜
InnoDB🎜🎜MySQL 5.1부터 기본 스토리지 엔진은 InnoDB 스토리지 엔진이 되었습니다. MyISAM과 비교할 때 InnoDB 스토리지 엔진은 트랜잭션 작업을 지원하고 트랜잭션 ACID를 갖는다는 점에서 큰 변화를 겪었습니다. 격리 기능, 기본 격리 수준은 MVCC(동시 버전 제어)를 통해 구현되는 반복 읽기입니다. 더티 읽기 및 반복 불가능 읽기 문제를 해결할 수 있습니다. 🎜InnoDB는 외래 키 연산을 지원합니다. 🎜InnoDB의 기본 잠금 세분성은 행 수준 잠금으로, 동시성 성능이 더 뛰어나지만 교착 상태가 발생할 수 있습니다. 🎜MyISAM과 동일하게 InnoDB 스토리지 엔진에도 .frm 파일 스토리지 테이블 구조 정의가 있지만 차이점은 InnoDB의 테이블 데이터와 인덱스 데이터가 모두 리프에 함께 저장된다는 점입니다. B+ 번호의 노드에서는 MyISAM의 테이블 데이터와 인덱스 데이터가 분리됩니다. 🎜InnoDB에는 안전한 로그 파일이 있습니다. 이 로그 파일은 데이터베이스 충돌이나 기타 상황으로 인해 발생한 데이터 손실을 복구하고 데이터 일관성을 보장하는 데 사용됩니다. 🎜InnoDB와 MyISAM은 동일한 인덱스 유형을 지원하지만 파일 구조가 다르기 때문에 구체적인 구현이 매우 다릅니다. 🎜추가, 삭제, 수정, 쿼리 성능 측면에서 추가, 삭제, 수정 작업이 많이 수행되는 경우에는 삭제 작업 중에 행을 삭제하고 InnoDB 스토리지 엔진을 사용하는 것이 좋습니다. 테이블을 다시 작성하지 않습니다.
MEMORY🎜🎜MEMORY 스토리지 엔진은 메모리에 저장된 콘텐츠를 사용하여 테이블을 생성합니다. 각 MEMORY 테이블은 실제로 하나의 디스크 파일에만 해당하며 형식은 .frm입니다. MEMORY 유형 테이블은 데이터가 메모리에 저장되므로 매우 빠르게 액세스됩니다. 기본적으로 HASH 인덱스가 사용됩니다. 🎜
MERGE🎜🎜MERGE 스토리지 엔진은 MyISAM 테이블 집합의 조합입니다. MERGE 테이블 자체에는 데이터가 없으며 MERGE를 쿼리, 업데이트 및 삭제할 수 있습니다. 작업은 실제로 내부 MyISAM 테이블에서 수행됩니다. MERGE 테이블은 디스크에 두 개의 파일을 유지합니다. 하나는 테이블 정의를 저장하는 .frm 파일이고 다른 하나는 테이블의 구성을 저장하는 .MRG 파일입니다. 병합 테이블. 🎜🎜적절한 스토리지 엔진 선택🎜🎜실제 개발 과정에서는 애플리케이션 특성에 따라 적절한 스토리지 엔진을 선택하는 경우가 많습니다. 🎜
MyISAM: 애플리케이션이 일반적으로 검색 지향적이고 삽입, 업데이트 및 삭제 작업 수가 적고 사물의 무결성과 동시성이 그다지 높지 않은 경우 일반적으로 MyISAM 스토리지 엔진을 선택하는 것이 좋습니다.
InnoDB: 외래 키를 사용하고 높은 수준의 동시성을 요구하며 높은 데이터 일관성 요구 사항이 있는 경우 일반적으로 주요 인터넷 회사는 동시성 및 데이터 무결성에 대한 요구 사항이 높기 때문에 일반적으로 InnoDB 엔진을 선택합니다. InnoDB 스토리지 엔진.
MEMORY: MEMORY 스토리지 엔진은 모든 데이터를 메모리에 저장하며 빠른 위치가 필요할 때 매우 빠른 액세스를 제공할 수 있습니다. MEMORY는 일반적으로 업데이트 빈도가 낮고 결과에 빠르게 액세스하는 작은 테이블에 사용됩니다.
MERGE: MERGE는 내부적으로 MyISAM 테이블을 사용합니다. MERGE 테이블의 장점은 단일 MyISAM 테이블의 크기 제한을 뛰어넘을 수 있다는 점이며, 여러 디스크에 서로 다른 테이블을 분산함으로써 MERGE 테이블의 액세스 효율성을 높일 수 있습니다. 효과적으로 개선됩니다.
적절한 데이터 유형 선택
우리가 자주 접하는 문제는 테이블을 만들 때 적절한 데이터 유형을 선택하는 방법입니다. 일반적으로 적절한 데이터 유형을 선택하면 성능이 향상되고 불필요한 문제가 줄어듭니다. 적절한 데이터 유형을 선택합니다.
CHAR 및 VARCHAR의 선택
char과 varchar는 문자열을 저장하는 데 자주 사용하는 두 가지 데이터 유형입니다. char은 일반적으로 다음과 같은 고정 길이 문자 유형입니다
값
char(5)
저장소 바이트
''
' '
5바이트
'cx'
'cx '
5바이트
'cxuan'
'cxuan'
5바이트
'cxuan007'
'cxuan'
5바이트
작성한 값에 관계없이 char 문자의 길이가 다음과 같다는 것을 알 수 있습니다. 지정된 문자열 길이가 문자 길이를 지정하기에 충분하지 않으면 공백으로 채워집니다. 문자열 길이를 초과하면 지정된 문자 길이의 문자만 저장됩니다.
여기서 주의할 점: MySQL이 严格模式的话,上面表格最后一行是可以存储的。如果 MySQL 使用了 严格模式 이외의 다른 것을 사용하는 경우 테이블의 마지막 행을 저장할 때 오류가 보고됩니다.
varchar 문자 유형을 사용하는 경우 예제를 살펴보겠습니다.
value
varchar(5)
stores bytes
''
''
1 바이트
'cx'
'cx '
3바이트
'cxuan'
'cxuan'
6바이트
'cxuan007'
'c '
6바이트
varchar를 사용하면 저장된 바이트가 실제 값에 따라 저장되는 것을 볼 수 있습니다. varchar의 길이가 5인데 왜 3바이트나 6바이트를 저장해야 하는지 궁금할 수도 있는데, 이는 varchar 데이터 형식을 저장용으로 사용할 경우 기본적으로 문자열 길이가 끝에 추가되어 1워드 섹션을 차지하기 때문입니다. (열 선언이 255보다 길면 2바이트가 사용됩니다.) varchar는 빈 문자열을 채우지 않습니다.
일반적으로 char를 사용하여 신분증 번호, 휴대폰 번호, 이메일 등 고정 길이 문자열을 저장합니다. varchar를 사용하여 가변 길이 문자열을 저장합니다. char의 길이가 고정되어 있기 때문에 처리 속도는 VARCHAR에 비해 훨씬 빠르지만, 저장 공간을 낭비한다는 단점이 있다. 그러나 MySQL 버전의 지속적인 발전에 따라 varchar 데이터 형식의 성능도 지속적으로 향상되고 향상되고 있다. , 많은 응용 프로그램에서 사용되므로 VARCHAR 유형이 더 일반적으로 사용됩니다.
MySQL에서는 스토리지 엔진마다 CHAR과 VARCHAR의 사용 원칙이 다릅니다
MyISAM: 가변 길이 데이터 열 대신 고정 길이 데이터 열을 사용하는 것이 좋습니다. 즉, CHAR
MEMORY: 고정 길이 사용 처리, CHAR 및 VARCHAR은 CHAR
InnoDB로 처리됩니다. VARCHAR 유형
TEXT 및 BLOB
을 사용하는 것이 좋습니다. 일반적으로 적은 양의 텍스트를 저장할 때 CHAR 및 VARCHAR를 선택하고, 많은 양을 저장할 때 데이터의 경우 텍스트의 경우 TEXT와 BLOB를 선택하는 경우가 많습니다. TEXT와 BLOB의 주요 차이점은 BLOB는 이진 데이터를 저장할 수 있는 반면 TEXT는 문자 데이터만 저장할 수 있다는 것입니다. >, TEXT는 아래쪽으로 세분화되어 二进制数据;而 TEXT 只能保存字符数据,TEXT 往下细分有
TEXT
MEDIUMTEXT
LONGTEXT
BLOB 往下细分有
BLOB
MEDIUMBLOB
LONGBLOB
三种,它们最主要的区别就是存储文本长度不同和存储字节不同,用户应该根据实际情况选择满足需求的最小存储类型,下面主要对 BLOB 和 TEXT 存在一些问题进行介绍
TEXT 和 BLOB 在删除数据后会存在一些性能上的问题,为了提高性能,建议使用 OPTIMIZE TABLE 功能对表进行碎片整理。
🎜🎜BLOB🎜🎜MEDIUMBLOB🎜🎜LONGBLOB🎜🎜으로 세분화됩니다. 🎜. 주요 차이점은 텍스트 길이입니다. 저장 바이트가 다르므로 사용자는 실제 상황에 따라 필요에 맞는 최소 저장 유형을 선택해야 합니다. 다음은 주로 BLOB 및 TEXT와 관련된 몇 가지 문제를 소개합니다. 🎜🎜TEXT 및 BLOB에서는 데이터 삭제 후 몇 가지 성능 문제가 발생합니다. 성능 향상을 위해 테이블 조각 모음을 수행하는 OPTIMIZE TABLE 기능을 사용하는 것이 좋습니다. 🎜🎜합성 인덱스를 사용하여 텍스트 필드(BLOB 및 TEXT)의 쿼리 성능을 향상시킬 수도 있습니다. 합성 인덱스는 대형 텍스트(BLOB, TEXT) 필드의 내용을 기반으로 해시 값을 생성하고, 이 값을 해당 컬럼에 저장하여 해시 값을 기반으로 해당 데이터 행을 찾을 수 있도록 하는 것입니다. 일반적으로 md5(), SHA1() 등의 해싱 알고리즘을 사용합니다. 해싱 알고리즘으로 생성된 문자열에 후행 공백이 있는 경우 이를 CHAR 및 VARCHAR에 저장하지 마세요.🎜🎜먼저 이 방법을 살펴보겠습니다. Blob 필드와 해시 값을 기록하는 테이블 만들기🎜🎜🎜🎜🎜🎜해시 값이 info의 해시 값으로 사용되는 cxuan005에 데이터를 삽입합니다. 🎜🎜🎜🎜🎜🎜그런 다음 데이터 두 개를 더 삽입하세요🎜🎜🎜🎜🎜🎜정보가 포함된 데이터 조각을 cxuan005🎜🎜🎜🎜🎜🎜정보가 다음과 같은 데이터를 쿼리하려는 경우 cxuan005, 해시 열을 통해 쿼리하여🎜🎜🎜🎜🎜🎜합성 인덱스의 예입니다. BLOB에 대해 퍼지 쿼리를 수행하려면 접두사 인덱스를 사용해야 합니다. 🎜🎜BLOB 및 TEXT를 최적화하는 다른 방법: 🎜🎜🎜필요하지 않은 경우 BLOB 및 TEXT 인덱스를 검색하지 마세요. 🎜🎜BLOB 또는 TEXT 열을 별도의 테이블로 분리하세요. 🎜🎜
부동소수점수와 고정소수점수 선택🎜🎜부동소수점수는 부동소수점수를 숫자에 대입한 후의 값을 말합니다. 지정된 열이 지정된 정밀도를 초과하면 MySQL의 부동 소수점 숫자는 float 및 double을 참조하고 고정 소수점 숫자는 를 참조합니다. 소수점. 고정 소수점 숫자가 더 정확할 수 있습니다. 부동 소수점 숫자의 정확성을 설명하기 위해 예를 사용하겠습니다🎜🎜먼저 부동 소수점 숫자 문제를 테스트하기 위해 cxuan006 테이블을 생성하므로 여기서 선택한 데이터 유형은 float입니다🎜🎜🎜🎜🎜🎜🎜 그런 다음 두 개의 데이터 조각을 삽입합니다. 각각🎜
그런 다음 쿼리를 실행하면 쿼리된 두 데이터가 서로 다르게 반올림되는 것을 확인할 수 있습니다.
부동 소수점 수와 고정 소수점 수의 정확성 문제를 명확하게 확인하기 위해 다음을 살펴보겠습니다. 예
먼저 cxuan006의 두 필드를 동일한 길이와 소수 자릿수로 수정합니다
그런 다음 두 개의 데이터를 삽입합니다
쿼리 작업을 실행하면 부동 소수점 숫자가 고정 소수점 숫자보다 작으면 오류가 발생한다고 합니다
날짜 유형 선택
MySQL에서 표시하는 데 사용되는 날짜 유형은 DATE, TIME, DATETIME, TIMESTAMP이며
138개의 사진이 도움이 될 것입니다. MySQL을 시작하세요
날짜 유형 간의 차이점은 이 기사에서 소개되었으므로 여기서는 자세히 설명하지 않겠습니다. 다음은 시간대와 관련되어 현재 시간을 더 잘 반영할 수 있는
TIMESTAMP 선택을 주로 소개합니다. 녹화된 날짜를 다른 시간대에 있는 사람들이 사용해야 하는 경우 TIMESTAMP를 사용하는 것이 가장 좋습니다.
DATE는 연, 월, 일을 나타내는 데 사용됩니다. 실제 애플리케이션 값에서 연, 월, 일을 저장해야 하는 경우 DATE를 사용할 수 있습니다.
TIME은 시, 분, 초를 나타내는 데 사용됩니다. 실제 응용 프로그램 값이 시, 분, 초를 저장해야 하는 경우 TIME을 사용할 수 있습니다.
YEAR는 연도를 나타내는 데 사용됩니다. YEAR에는 2자리(4자리 선호) 및 4자리 연도 형식이 있습니다. 기본값은 4자리입니다. 실제 애플리케이션이 연도만 저장하는 경우 YEAR 유형을 저장하는 데 1바이트를 사용하는 것이 좋습니다. 수납공간을 절약할 수 있을 뿐만 아니라 테이블 운영 효율성도 높일 수 있습니다.
MySQL 문자 집합
MySQL 문자 집합을 알아봅시다. 간단히 말해서 문자 집합은 텍스트 기호, 인코딩 및 비교 규칙의 집합입니다. 1960년에 미국 표준 기구 ANSI는 유명한 ASCII(정보 교환을 위한 미국 표준 코드)인 최초의 컴퓨터 문자 집합을 출시했습니다. ASCII 인코딩 이후 각 국가 및 국제기구에서는 ISO-8859-1, GBK 등과 같은 고유한 문자 집합을 개발했습니다. ASCII(American Standard Code for Information Interchange) 。自从 ASCII 编码后,每个国家、国际组织都研究了一套自己的字符集,比如 ISO-8859-1、GBK 等。