1. 거래란 무엇인가요?
트랜잭션은 일련의 데이터베이스 작업 명령을 포함하는 메커니즘, 작업 순서이며 모든 명령은 시스템 전체에 제출됩니다.
또는 작업 요청을 취소합니다. 즉, 이 데이터베이스 그룹이 모두 실행되거나 아무것도 실행되지 않습니다. 특히 여러 사용자가 동시에 운영하는 데이터베이스 시스템에 적합합니다.
트랜잭션은 단일 논리적 작업 단위로 수행되는 일련의 작업입니다.
논리적 작업 단위에는 4가지 속성이 있어야 합니다.
원자성: 트랜잭션은 완전한 작업이며 트랜잭션 요소를 더 이상 나눌 수 없습니다. 모든 요소는 전체적으로 커밋되거나 롤백되어야 합니다.
일관성: 트랜잭션이 완료되면 데이터는 일관된 상태여야 합니다.
격리: 데이터를 수정할 때 모든 동시 트랜잭션이 서로 격리됩니다.
내구성: 트랜잭션이 완료된 후 시스템에 미치는 영향은 영구적입니다.
2. 거래 생성
거래 시작: 거래를 시작합니다.
커밋 트랜잭션: 트랜잭션 커밋
롤백(실행 취소) 트랜잭션: 롤백 트랜잭션
암호
스터드 사용
가다
존재하는 경우(이름 = '은행'인 sysobjects에서 * 선택)
드롭 테이블 뱅크
테이블 뱅크 생성
(
customerName char(10), --고객 이름
currentMoney 돈 --잔고
)
가다
--계좌 잔액이 1보다 작을 수 없다는 확인 제약 조건을 추가합니다.
테이블 뱅크 변경
제약조건 CK_currentMoney 확인 추가(currentMoney >= 1)
가다
은행 가치에 삽입('장산',1000)
은행 가치에 삽입('lee思',1)
은행에서 *를 선택하세요
------------------------------------- --------
--------------- * * * * 사건* * 사건* * * * -------------
------------------------------------- --------
스터드 사용
가다
set nocount on - 영향을 받은 행 번호 정보를 표시하지 않습니다.
'거래 전 데이터:'를 인쇄합니다.
은행에서 *를 선택하세요
가다
거래 시작
@errorSum int 선언
@errorSum=0으로 설정
은행 세트 currentMoney = currentMoney-1000 업데이트, 여기서 고객 이름='Zhang San'
업데이트 은행 세트 currentMoney = currentMoney+1000, 여기서 고객 이름='lee思'
@errorSum = @errorSum + 1 설정
'거래 내 데이터:'를 인쇄합니다.
은행에서 *를 선택하세요
@errorSum <> 0인 경우
시작하다
'거래 실패, 거래 롤백' 인쇄
롤백 트랜잭션
끝
또 다른
시작하다
'트랜잭션 성공, 트랜잭션 커밋, 하드 디스크에 쓰기, 영구 저장'을 인쇄합니다.
트랜잭션 커밋
끝
가다
'거래 후 데이터:'를 인쇄합니다.
은행에서 *를 선택하세요
------------------------------------- --------
--------------- * * * * 인용* * 인용* * * * -------------
------------------------------------- --------
--Index: 데이터를 정리하기 위한 SQL Server의 내부 방법입니다.
--인덱스는 다음 세 가지 유형으로 나눌 수 있습니다.
--고유 인덱스: 두 행이 동일한 인덱스 값을 가질 수 없습니다.
--기본 키 인덱스: 테이블의 기본 키를 정의할 때 자동으로 고유 인덱스를 생성하는 특수한 유형의 기본 키 인덱스입니다. 기본 키의 각 값은 고유해야 합니다.
--클러스터형 인덱스: 테이블에 있는 행의 물리적 순서는 키 값의 논리적(인덱스) 순서와 동일합니다. 테이블에는 하나의 클러스터형 인덱스만 포함될 수 있습니다(사전의 병음으로 이해될 수 있음).
-- 비클러스터형 인덱스: 데이터와 인덱스에는 데이터가 저장되는 해당 위치에 대한 지점이 포함되어 있습니다. 테이블 행의 물리적 순서가 키 값의 논리적 순서와 일치하지 않습니다. (MAP으로 이해 가능)
--클러스터형 인덱스는 비클러스터형 인덱스보다 빠릅니다.
--테이블에는 클러스터형 인덱스가 하나만 있을 수 있지만 비클러스터형 인덱스는 여러 개가 있을 수 있습니다. 열을 기본 키로 설정하면 해당 열은 기본적으로 클러스터형 인덱스가 됩니다.
--테이블에는 인덱스가 없을 수 있으며 기본 키 인덱스가 반드시 클러스터형 인덱스일 필요는 없습니다.
--인덱스는 어디에 사용되나요?
-- 자주 검색되어 데이터를 정렬하는 데 사용되는 열입니다.
--잘못된 유형은 몇 가지 다른 값만 갖고 테이블에 데이터 행도 몇 개만 있으므로 인덱스를 사용할 필요가 없습니다.
--문법
--create [unique][clustered|nonclustered] index_name on table_name (column_name[,column_name]...)
--[
-- 채우기 비율 = x --채우기 비율 x는 0에서 100 사이의 값입니다.
--]
암호
스터드 사용
가다
존재하는 경우([이름]='IX_stuMarks_writerExam'인 sysindexes에서 [이름] 선택)
drop index stuMarks.IX_stuMarks_writeExam --인덱스가 이미 존재하는지 쿼리하고 존재하는 경우 삭제합니다.
stuMarks(writeExam)에 비클러스터형 인덱스 IX_stuMarks_writeExam 생성
fillfactor=30 --채우기 비율 예약 공간
가다
--질문
stumarks에서 * 선택(색인=IX_stuMarks_writerExam)
--오류가 보고됩니다. 'index' 근처에 구문 오류가 있습니다. 테이블 힌트의 일부가 되려면 다음과 같이 WITH 키워드와 괄호가 있어야 합니다.
(index=IX_stuMarks_writerExam)을 사용하여 stumark에서 *를 선택하세요.
60에서 90 사이의 writeExam이 있는 stumarks에서 *를 선택하세요(index=IX_stuMarks_writerExam).
------------------------------------- --------
--------------- * * * * 보기* * 사진* * * * ---------------
------------------------------------- --------
뷰(View): 가상 테이블, 하나의 테이블 또는 여러 테이블의 데이터를 기반으로 하는 쿼리 방식입니다.
일반 기능: 테이블의 행 필터링, 승인되지 않은 사용자가 중요한 데이터에 액세스하는 것을 방지, 여러 물리적 데이터 테이블을 하나의 논리적 데이터 테이블로 추상화
--문법:
--뷰 생성 view_name
--처럼
--<선택문>
암호
스터드 사용
가다
존재하는 경우(이름='view_stuinfo_stumarks'인 sysobjects에서 * 선택)
드롭 뷰 view_stuinfo_stumarks
가다
view_stuinfo_stumarks 뷰 생성
~처럼
이름=stuname, 학생 번호=stuinfo.stuno, 필기 시험 점수=writerexam, 컴퓨터 시험 점수=labexam 선택,
평균 점수 = stuinfo의 (writingexam+labexam)/2 stuinfo.stuno의 stumark에 왼쪽으로 가입 = stumarks.stuno
가다