이 글은 mysql 데이터베이스에 대한 관련 지식을 주로 인덱싱, 구문 순서, 실행 순서, 저장 프로시저 및 기타 관련 문제를 포함하여 데이터베이스의 몇 가지 기본 지식 포인트로 구성합니다.
추천 학습: mysql 튜토리얼
원자성
)Atomicity
)Consistency
)Isolation
)Durability
)SQL
标准定义了四种隔离性:(下面隔离性是由低到高,并发性由高到低)
select
전체 트랜잭션에 필요한 모든 작업은 성공적으로 제출되거나 모두 실패하여 롤백되어야 합니다. Consistency
)Isolation
) 격리를 위해서는 트랜잭션이 데이터베이스의 데이터를 수정해야 하며 그렇지 않습니다. 나중에 커밋이 완료될 때까지 다른 트랜잭션에 표시되지 않습니다. (즉, 트랜잭션은 순차적으로 실행되어야 합니다.)
내구성(Durability
)
내구성이란 일단 트랜잭션이 제출되면 데이터베이스의 데이터 변경 사항이 영구적이라는 것을 의미합니다. 데이터베이스 시스템에 오류가 발생하더라도 트랜잭션 커밋 작업은 손실되지 않습니다.
SQL
표준은 네 가지 유형의 격리를 정의합니다. (다음 격리는 낮은 수준에서 높은 수준, 동시성은 높은 수준에서 낮은 수준입니다.)
커밋되지 않은 읽기입니다.
가장 낮은 격리 수준으로 다른 트랜잭션이 커밋되지 않은 데이터를 볼 수 있도록 허용하여 더티 읽기로 이어질 수 있습니다. 🎜🎜읽기 위해 제출되었습니다. 🎜 데이터베이스는 읽기와 쓰기가 분리되어 있기 때문에 트랜잭션을 읽을 때 읽기 잠금을 획득하지만, 읽기 잠금이 해제된 후 다른 트랜잭션에 의해 데이터가 수정될 수 있습니다. 읽기 전후의 데이터가 다르기 때문에 반복할 수 없는 읽기가 발생합니다. (읽기 잠금은 트랜잭션이 커밋된 후에 해제될 필요가 없지만, 쓰기 잠금은 트랜잭션이 커밋된 후에 해제되어야 합니다.) 🎜🎜반복 읽기. 🎜select
로 얻은 모든 데이터는 거래 전후의 일관성 없는 읽기를 방지하기 위해 수정할 수 없습니다. 그러나 다른 트랜잭션은 현재 선택된 데이터를 변경할 수 없지만 데이터를 추가할 수 있으므로 가상 읽기를 제어할 수 없습니다. 🎜🎜직렬화 가능. 🎜 팬텀 읽기를 피하기 위해 모든 트랜잭션은 차례로 실행됩니다. 잠금을 기반으로 동시성 제어를 구현하는 데이터베이스의 경우 직렬화에서는 범위 쿼리를 실행할 때 동시성 제어가 구현되지 않은 경우 범위 잠금을 획득해야 합니다. 잠금, 데이터베이스, 직렬 작업을 위반하는 트랜잭션이 감지되면 해당 트랜잭션을 롤백해야 합니다. 🎜🎜🎜요약: 4가지 레벨이 점차 강화되며, 각 레벨에서 문제가 해결됩니다. 거래 레벨이 높아질수록 성능이 저하됩니다. ( 읽기 커뮤니티)는 불가능할 수 있습니다. 커밋되지 않은 읽기는 더티 읽기를 유발합니다. -> 커밋된 읽기는 더티 읽기를 해결하지만 반복 불가능한 읽기를 유발합니다. -> 반복 가능한 읽기는 불일치 전후의 결과를 읽는 문제를 해결하지만 가상 읽기를 유발합니다(이전이 아니라 현재) -> 직렬화 기능은 팬텀 읽기를 해결하지만 많은 범위 잠금을 추가하여 잠금 시간 초과를 유발할 수 있습니다.
(4) 결합 인덱스
(5) 클러스터형 인덱스는 각 테이블의 기본 키를 기반으로 B+ 트리를 구성하며, 전체 테이블의 행 레코드 데이터는 리프 노드에 저장되므로 클러스터형 인덱스의 리프 노드도 데이터 페이지가 됩니다.
(6) 비클러스터형 인덱스(보조 인덱스)(페이지 노드는 전체 레코드 행을 저장하지 않습니다).
2.3 Index failure
2.4 각 엔진은 인덱스를 지원합니다
MyISAM
,InnoDB
,Memonry
三个常用MySQL
2.5 데이터베이스의 인덱스 구조
이진 트리를 사용하는 경우 이진 트리의 깊이가 너무 커서 I/O 읽기 및 쓰기가 너무 자주 발생하여 쿼리 효율성이 떨어집니다. 따라서 다중 방향 트리 구조를 사용하면 B-트리에 대한 다양한 작업을 통해 B-트리의 높이를 낮게 유지할 수 있습니다.
select[distinct], from, Join (예: Left Join), on, where, group4. MySQL 실행 순서 즉, 실행 시 sql은 다음 순서로 실행됩니다.by, had, Union, order by,limit
from, on, Join, where, group by, had, select, discover, Union, order by예:group by는 집계 함수와 함께 사용해야 합니다.
select a.Customer,sum(a.OrderPrice) from orders a where a.Customer=’Bush’ or a.Customer = ‘Adams’ group by a.Customer;다중 테이블 쿼리 구현(내부 조인)
select u.uname,a.addr from lm_user u inner join lm_addr a on u.uid = a.uid;
select from where도 사용할 수 있습니다. 구현 <p></p>
<pre class="brush:php;toolbar:false">select u.uname,a.addr from lm_user u, lm_addr a where u.uid = a.uid;</pre>
<code>select from where
同样可以实现delimiter $$ create procedure procedure_bill() comment '查询所有销售情况' begin select billid, tx_time, amt from lm_bill; end $$ delimiter ;
call procedure_bill();
调用存储过程
show procedure status like 'procedure_bill';
查看存储过程
/**学生表*/ CREATE TABLE Student ( stu_id INT AUTO_INCREMENT, NAME VARCHAR(30), age INT , class VARCHAR(50), address VARCHAR(100), PRIMARY KEY(stu_id) ) /*学生课程表*/ CREATE TABLE Course( cour_id INT AUTO_INCREMENT, NAME VARCHAR(50), CODE VARCHAR(30), PRIMARY KEY(cour_id) ) /**学生课程关联表*/ CREATE TABLE Stu_Cour( sc_id INT AUTO_INCREMENT, stu_id INT , cour_id INT, PRIMARY KEY(sc_id) )
在数据库中,如果两个表的之间的关系为多对多的关系,如:“学生表和课程表”,一个学生可以选多门课,一门课也可以被多个学生选;根据数据库的设计原则,应当形成第三张关联表。
步骤1:创建三张数据表Student ,Course,Stu_Cour
/*添加外键约束*/ ALTER TABLE Stu_Cour ADD CONSTRAINT stu_FK1 FOREIGN KEY(stu_id) REFERENCES Student(stu_id); ALTER TABLE Stu_Cour ADD CONSTRAINT cour_FK2 FOREIGN KEY(cour_id) REFERENCES Course(cour_id);
第二步:为Stu_Cour关联表添加外键
rrreee完成创建!
alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名)
;例: alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id);
当你访问数据库时,不管是手工访问,还是程序访问,都不是直接读写数据库文件,而是通过数据库引擎去访问数据库文件。
以关系型数据库为例,发SQL语句给数据库引擎,数据库引擎解释SQL语句,提取出你需要的数据返回给你。因此,对访问者来说,数据库引擎就是SQL语句的解释器。
主要区别:
MYISAM
是非事务安全型的,而InnoDB
是事务安全型;NYISAM
锁的粒度是表级锁,而InnoDB
支持行级锁;MYISAM
支持全文本索引,而InnoDB
不支持全文索引MYISAM
相对简单,所以在效率上要优于InnoDB
,小型应用可以考虑使用MYISAM
;MYISAM
表是保存成文件的形式,在跨平台的数据转移中使用MYISAM
存储会省去不少的麻烦;InnoDB
表比MYISAM
5. 저장 프로시저 rrreee
저장 프로시저 보기 🎜rrreee🎜 6. 다대다 데이터 테이블 관계 설정 🎜🎜 데이터베이스에서, 두 테이블 사이의 관계가 여러 쌍인 경우: "학생 테이블 및 코스 일정"과 같은 다중 관계에서는 한 학생이 여러 코스를 선택할 수 있으며 데이터베이스의 설계 원칙에 따라 한 코스를 여러 학생이 선택할 수도 있습니다. 세 번째 연관 테이블이 형성되어야 합니다. 🎜 1단계: Student, Course, Stu_Cour🎜rrreee🎜 3개의 데이터 테이블 생성 2단계: Stu_Cour 관련 테이블에 외래키 추가🎜rrreee🎜생성 완료! 🎜🎜🎜참고: 추가된 데이터 테이블에 외래 키를 추가합니다:🎜 - 구문:alter table table name add Constraint FK_ID 외래 키(외래 키 필드 이름) REFERENCES 외래 테이블 이름(해당 테이블의 기본 키) 필드 name)
;🎜🎜🎜예: alter table tb_active add Constraint FK_ID foreign key(user_id) REFERENCES tb_user(id);
🎜🎜Seven. 데이터베이스 엔진(스토리지 엔진)🎜🎜When 수동 액세스이든 프로그램 액세스이든 데이터베이스에 액세스하고, 데이터베이스 파일을 직접 읽고 쓰지 않고 데이터베이스 엔진을 통해 데이터베이스 파일에 액세스합니다. 🎜🎜관계형 데이터베이스를 예로 들어보겠습니다. 데이터베이스 엔진에 SQL 문을 보내면 데이터베이스 엔진이 SQL 문을 해석하여 필요한 데이터를 추출하여 반환합니다. 따라서 방문자에게 데이터베이스 엔진은 SQL 문의 해석기입니다. 🎜MYISAM
은 트랜잭션이 불가능하지만 InnoDB
는 트랜잭션이 안전합니다. 안전한 유형; 🎜🎜NYISAM
잠금 세분성은 테이블 수준 잠금이고, InnoDB
는 행 수준 잠금을 지원하고 🎜🎜MYISAM
은 전체 텍스트를 지원합니다. InnoDB
는 전체 텍스트 인덱스를 지원하지 않지만 🎜🎜MYISAM
은 비교적 간단하므로 효율성 측면에서 InnoDB
보다 낫습니다. 소규모 애플리케이션에서는 MYISAM
사용을 고려할 수 있습니다. 🎜🎜MYISAM
테이블은 파일로 저장됩니다. 크로스 플랫폼 데이터 전송에서 MYISAM
저장소를 사용하면 많은 문제가 있습니다.🎜🎜 (6) InnoDB
테이블은 MYISAM
테이블보다 더 안전합니다. 데이터 손실 없이 트랜잭션 테이블로 전환할 수 있습니다. 시나리오: 🎜MYISAM
은 애플리케이션이 많은 수의 select
를 수행해야 하는 경우 고속 저장 및 검색 기능을 제공합니다. code> 쿼리를 사용하는 경우에는 MYISAM이 더 나은 선택입니다. <code>MYISAM
管理非事务表,它提供高速存储和检索,以及全文搜索能力,如果应用中需要执行大量的select
查询,那么MYISAM
是更好的选择。
InnoDB
用于事务处理应用程序,具有众多特性,包括ACID
事务支持。如果应用中需要执行大量的insert
或update
操作,则应该使用innodb
InnoDB
는 트랜잭션 처리 애플리케이션에 사용되며 ACID
트랜잭션 지원을 포함한 많은 기능을 갖추고 있습니다. 애플리케이션이 다수의 삽입
또는 업데이트
작업을 수행해야 하는 경우 innodb
를 사용해야 합니다. 이는 다중 사용자 성능을 향상시킬 수 있습니다. 동시 작업.
현재 관계형 데이터베이스에는 6가지 패러다임이 있습니다: 첫 번째 정규형 {1NF}, 두 번째 정규형 {2NF}, 세 번째 정규형 {3NF}, Bass-Codd 정규형 {BCNF}, 네 번째 정규형 정규형 {4NF}, 다섯 번째 정규형 {5NF, 완전 정규형이라고도 함}. 최소 요구사항을 충족하는 패러다임이 첫 번째 정규형입니다. 첫 번째 정규형을 기반으로 더 많은 표준 요구 사항을 충족하는 것을 두 번째 정규형 {2NF}라고 하며 다른 패러다임은 이를 따릅니다. 일반적으로 데이터베이스는 세 번째 정규형(3NF)만 충족하면 됩니다. .
권장 학습: mysql 비디오 튜토리얼
🎜위 내용은 MySQL 데이터베이스 기본 지식 포인트 보유(정리된 요약)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!