数据库之子查询和事务隔离级别
数据库大的知识点,特此补上。看的还是《漫画数据库》。 一、查询 如果要从一个数据库里面检索出某一字段为最大的数据项,那用什么方法呢?其实用子查询就可以查到。 1)子查询是查询里面再嵌套查询。 people表: 如果我要查询年龄最大的那一行数据项。就可以
数据库大的知识点,特此补上。看的还是《漫画数据库》。
一、查询
如果要从一个数据库里面检索出某一字段为最大的数据项,那用什么方法呢?——其实用子查询就可以查到。
1)子查询是查询里面再嵌套查询。
people表:
如果我要查询年龄最大的那一行数据项。就可以使用子查询。
select * from people where age = (select max(age) from people);
当然,还有另外一种方法。
select * from people order by age desc limit 1;
2)相关子查询
子查询内部嵌套的表格其实可以使用外部指定的表格,为相关子查询。这里说的不是外部和内部的表格一定是不同的。看例子。
假如现在选出年龄大于本国平均年龄的人,单单用子查询是查不了的,因为我们需要每条数据的国家都和平均年龄的国家对应。
select * from people p where age>(select avg(age) from people where count ry = p.country);
但是有了之后,假如选到country为a的数据,那就会根据a国家的平均年龄进行比较,最终得到结果。
灵活运用子查询功能是很强大的。二、事务隔离级别
1)事务
既然谈到事务隔离级别,先要说明事务是什么东西,之前论坛一个老鸟也面试过别人这样的问题,
数据库进行数据的检索,插入、更新和删除,用户的一系列操作我们称为事务,最重要的一点,保证数据的一致性和完整性。
保证数据的一致性和完整性是怎么来的?其实数据库事务具有酸性。开玩笑,其实是ACID属性。
A,Atomicity,原子性,事务必须结束与提交或者回滚的任意一个任务。
C,Consistency,一致性,执行数据库事务不能破坏数据库的一致性,举个例子(你从银行取了1000元,那么其他关联表要跟着变)。
I,Isolation,隔离性,两个事务的执行互不干扰。
D,Durability,持久性,事务完成,便将更改持久保存于数据库,不会被回滚。
2)执行控制——利用锁
共享锁,一个事务读取数据时,可以加共享锁,就是其他事务只能读取数据,不能更改数据。
独占锁,一个事务更改数据时,可以加独占锁,就是其他事务不能读取数据,也不能更改数据。
3)隔离级别
笔试题中有考到,第一时间想到赃读,不可重复读这些。隔离级别的倒忘光了。
设定隔离级别后的现象。
先解释三个现象:
脏读:dirty read,事务1提交之前,事务2读取了1中的数据,1一旦回滚,2读取了不存在的数据的现象。
我本金10元,往银行存了10元,后面没存了,但是银行那边读多10元,并且按20元处理。
不可重复读:non-repeatable read,事务1读取时,事务2更新并提交,事务1再读取,发现前后数据不同。
银行查账单,发现你有10元,然后你取了10元出来,银行再查,发现余额为0。前后不同。
虚度(幻读):phatom,事务1检索多行数据,事务2插入符合检索条件的新数据,事务1第二次检索发现前后数据不同。
银行查询你的消费清单,你又跑去消费了,然后后面再查发现新消费的账单怎么不在第一次的查询里面,如幻影般消失。
read uncommited,读未提交,以上三种现象都可能会发生。
read commited,读提交,防止脏读,脏读的问题解决就是提交完成的数据才给你读,不然一旦回滚,读出来就是错的。
repeateable read,重复读,防止脏读和不可重复读,不可重复读确实是发生在事务提交之后,问题在于读取的时候又有事务进行更改,所以问题解决是,一旦读取数据,就不让你在中途进行更新(MySQL默认级别)。
serializable,序列化,防止三种现象,幻读问题是,你事务进行检索数据之后,有人插入新的数据,后面再检索发现多了一条,好比银行小姐明明就看你消费100元,后面你又刷卡1000,后面查出来的总消费是1100,这是银行小姐就慌张了。
解决问题所在就是读取数据时还禁止其他事务进行插入或者删除。
这样看来,其实事务的隔离机制就是在控制事务后其他事务不能进行的操作,隔离级别越高,条件就越多,代价越大,但是也不会出现任何的三种现象。
4)悲观锁和乐观锁
悲观锁:给加载的数据加锁,不让其他事务更新和加载,这样,脏读和不可重复读都不会出现,虚读还是有的,因为还是可以插入或者删除数据。
乐观锁:并不会像悲观那样锁死,基于数据版本的记录,更新最后的更新,这样的话,其实不可重复读的问题还是存在的。
根据不同的数据库设计和性能要求进行所需要的隔离级别,才是最恰当的。

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











Xuexin.com에서 내 학업 자격을 어떻게 확인하나요? Xuexin.com에서 학업 자격을 확인할 수 있습니다. 많은 사용자가 Xuexin.com에서 학업 자격을 확인하는 방법을 모릅니다. 다음으로 편집자는 Xuexin.com에서 학업 자격을 확인하는 방법에 대한 그래픽 튜토리얼을 제공합니다. 유저들이 와서 구경해 보세요! Xuexin.com 사용 튜토리얼: Xuexin.com에서 학업 자격을 확인하는 방법 1. Xuexin.com 입구: https://www.chsi.com.cn/ 2. 웹사이트 쿼리: 1단계: Xuexin.com 주소를 클릭합니다. 위의 홈페이지에 들어가려면 [교육 쿼리]를 클릭합니다. 2단계: 최신 웹페이지에서 아래 그림의 화살표와 같이 [쿼리]를 클릭합니다. 3단계: 새 페이지에서 [학점 파일에 로그인]을 클릭합니다. 4단계: 로그인 페이지에서 정보를 입력하고 [로그인]을 클릭합니다.

12306 티켓 예매 앱의 최신 버전을 다운로드하세요. 모두가 매우 만족하는 여행 티켓 구매 소프트웨어입니다. 소프트웨어에서 제공되는 다양한 티켓 소스가 있어 매우 편리합니다. - 실명인증으로 온라인 구매가 가능합니다. 모든 사용자가 쉽게 여행티켓과 항공권을 구매하고 다양한 할인 혜택을 누릴 수 있습니다. 또한 사전에 예약하고 티켓을 얻을 수도 있습니다. 호텔을 예약하거나 차량으로 픽업 및 하차할 수도 있습니다. 한 번의 클릭으로 원하는 곳으로 이동하고 티켓을 구매할 수 있어 여행이 더욱 간편해지고 편리해집니다. 모든 사람의 여행 경험이 더욱 편안해졌습니다. 이제 편집자가 온라인으로 자세히 설명합니다. 12306명의 사용자에게 과거 티켓 구매 기록을 볼 수 있는 방법을 제공합니다. 1. 철도 12306을 열고 오른쪽 하단의 My를 클릭한 후 My Order를 클릭합니다. 2. 주문 페이지에서 Paid를 클릭합니다. 3. 유료페이지에서

Go 언어는 효율적이고 간결하며 배우기 쉬운 프로그래밍 언어입니다. 동시 프로그래밍과 네트워크 프로그래밍의 장점 때문에 개발자들이 선호합니다. 실제 개발에서 데이터베이스 작업은 필수적인 부분입니다. 이 기사에서는 Go 언어를 사용하여 데이터베이스 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. Go 언어에서는 일반적으로 사용되는 SQL 패키지, Gorm 등과 같은 타사 라이브러리를 사용하여 데이터베이스를 운영합니다. 여기서는 sql 패키지를 예로 들어 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. MySQL 데이터베이스를 사용하고 있다고 가정합니다.

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

Hibernate 다형성 매핑은 상속된 클래스를 데이터베이스에 매핑할 수 있으며 다음 매핑 유형을 제공합니다. Join-subclass: 상위 클래스의 모든 열을 포함하여 하위 클래스에 대한 별도의 테이블을 생성합니다. 클래스별 테이블: 하위 클래스별 열만 포함하는 하위 클래스에 대한 별도의 테이블을 만듭니다. Union-subclass: Joined-subclass와 유사하지만 상위 클래스 테이블이 모든 하위 클래스 열을 통합합니다.

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

HTML은 데이터베이스를 직접 읽을 수 없지만 JavaScript 및 AJAX를 통해 읽을 수 있습니다. 단계에는 데이터베이스 연결 설정, 쿼리 보내기, 응답 처리 및 페이지 업데이트가 포함됩니다. 이 기사에서는 JavaScript, AJAX 및 PHP를 사용하여 MySQL 데이터베이스에서 데이터를 읽는 실제 예제를 제공하고 쿼리 결과를 HTML 페이지에 동적으로 표시하는 방법을 보여줍니다. 이 예제에서는 XMLHttpRequest를 사용하여 데이터베이스 연결을 설정하고 쿼리를 보내고 응답을 처리함으로써 페이지 요소에 데이터를 채우고 데이터베이스를 읽는 HTML 기능을 실현합니다.

MySQL 데이터베이스 관리 시스템의 기본 원리 분석 MySQL은 데이터 저장 및 관리를 위해 구조화된 쿼리 언어(SQL)를 사용하는 일반적으로 사용되는 관계형 데이터베이스 관리 시스템입니다. 이 글에서는 데이터베이스 생성, 데이터 테이블 설계, 데이터 추가, 삭제, 수정 및 쿼리 등을 포함한 MySQL 데이터베이스 관리 시스템의 기본 원리를 소개하고 구체적인 코드 예제를 제공합니다. 1. 데이터베이스 생성 MySQL에서는 먼저 데이터를 저장할 데이터베이스 인스턴스를 생성해야 합니다. 다음 코드는 "my
