찾다
php教程PHP开发SQL 트리거 동작에 대한 자세한 설명

트리거가 테이블에 삽입, 업데이트 또는 삭제될 때 자동으로 실행되는 특수 저장 프로시저입니다. 트리거는 일반적으로 더 복잡한 검사 제약 조건이 있는 제약 조건에 사용됩니다. 트리거와 일반 저장 프로시저의 차이점은 트리거가 특정 테이블에서 작동한다는 것입니다. 업데이트, 삽입, 삭제 등의 작업 중에 시스템은 테이블에서 해당 트리거를 자동으로 호출하고 실행합니다. SQL Server 2005의 트리거는 DML 트리거와 DDL 트리거의 두 가지 범주로 나눌 수 있습니다. DDL 트리거는 다양한 데이터 정의 언어 문에 영향을 미치며 트리거되는 문에는 create, alter 및 drop 문이 포함됩니다.

삽입, 업데이트, 삭제 이벤트에 각각 적용되는 세 가지 일반적인 트리거가 있습니다.

트리거를 사용해야 하는 이유는 무엇인가요? 예를 들어 다음 두 테이블은 다음과 같습니다.

학생 테이블 만들기(                                                                    StudentID int  

테이블 BorrowRecord 만들기(                                      >                            ' ~ ' s ' s ' ' s div ' s                                                                                                                                                                                                                                      --대출 시간 반환 날짜, -복귀 시간
...

)


사용되는 기능은 다음과 같습니다.
1. 학생의 학번을 변경하면, 그의 대출 기록이 여전히 이 학생과 관련되어 있기를 바랍니다(즉, 대출 기록 테이블의 학생 ID를 동시에 변경)
2. 학생이 졸업한 경우 해당 학생의 학생 ID를 삭제하고 동시에 대출 기록도 삭제하세요.
잠깐만요.

이때 트리거를 사용할 수 있습니다. 1의 경우 업데이트 트리거를 만듭니다.



트리거 만들기 truStudent
On Student - 업데이트를 위해 Student 테이블

에 트리거 만들기 ​​​​​—이벤트 이유

다음과 같이                                                  — 이벤트가 트리거된 후 수행할 작업                                 > > ~                    . 삽입됨 --삭제 및 임시 테이블 삽입

여기서 br.StudentID=d.StudentID


트리거의 두 임시 테이블인 삭제됨과 삽입됨을 이해합니다. 삭제됨과 삽입됨은 각각 이벤트를 트리거한 테이블의 "이전 레코드"와 "새 레코드"를 나타냅니다.
테이블의 변경 사항을 기록하는 정보를 저장하는 데 사용되는 데이터베이스 튜토리얼 시스템에는 두 개의 가상 테이블이 있습니다.
~                       ​new 저장 기록 없이 기록 추가

기록 업데이트에 사용되는 새 기록 복구

삭제 및 저장 시 일회용 레코드라고 생각하면 됩니다. 삽입된 테이블에 새 레코드를 생성하고, 이전 레코드를 삭제된 테이블에 복사한 다음, 학생 레코드를 삭제하고 새 레코드를 작성합니다.

2의 경우 삭제 트리거를 만듭니다.
트리거 trdStudent

On Student

for 삭제

As

BorrowRecord
BorrowRecord에서 br , Delted d
여기서 br.StudentID=d.StudentID



다음 두 예에서 트리거의 핵심을 확인할 수 있습니다. A. 2개의 임시 테이블 B .Trigger 메커니즘

DML 트리거는 다음과 같이 구분됩니다.

1. 이후 트리거(이후 트리거)

a. 삽입 트리거

업데이트 트리거

c. 트리거 삭제

2. 트리거 대신(트리거 이전)

트리거 이후에는 트리거가 트리거되어야 합니다. 특정 작업 삽입, 업데이트 또는 삭제가 실행된 후에만 해당 테이블에서만 정의할 수 있습니다. 트리거 대신 정의된 작업(삽입, 업데이트, 삭제)을 실행하지 않고 트리거 자체만 실행한다는 의미입니다. 트리거 대신 테이블이나 뷰에서 정의할 수 있습니다.

트리거에는 삽입 테이블(삽입된 테이블)과 삭제 테이블(삭제된 테이블)이라는 두 가지 특수 테이블이 있습니다. 이 두 가지는 논리 테이블과 가상 테이블입니다. 시스템은 메모리에 두 개의 테이블을 생성하고 이를 데이터베이스에 저장하지 않습니다. 또한 두 테이블 모두 읽기 전용이므로 데이터를 읽을 수만 있고 수정할 수는 없습니다. 이 두 테이블의 결과는 항상 수정된 트리거가 적용되는 테이블과 동일한 구조를 갖습니다. 트리거가 작업을 완료하면 두 테이블이 삭제됩니다. Inserted 테이블의 데이터는 삽입 또는 수정 후의 데이터이고, 삭제된 테이블의 데이터는 업데이트 또는 삭제 전의 데이터입니다.

데이터 업데이트 시 테이블 레코드를 먼저 삭제한 후 레코드를 추가합니다. 이런 방식으로 삽입된 테이블과 삭제된 테이블에 업데이트된 데이터 레코드가 있게 됩니다. 트리거 자체는 트랜잭션이므로 트리거의 수정된 데이터에 대해 몇 가지 특별한 검사를 수행할 수 있습니다. 만족스럽지 않은 경우 트랜잭션 롤백을 사용하여 작업을 취소할 수 있습니다.

instead of 触发器

Ø 트리거 생성

구문

create Trigger tgr_name

on table_name

암호화 – 암호화 트리거

업데이트용...

as

Transact-SQL

#삽입 유형 트리거 생성

--삽입 삽입 유형 트리거 생성
(object_id('tgr_classes_insert', 'tr')이 null이 아닌 경우)
클래스에서 트리거 삭제 tgr_classes_insert
go
트리거 tgr_classes_insert 생성

삽입용 --insert 트리거
as
--define 변수
선언 @id int, @name varchar(20), @temp int;
--삽입된 테이블에 쿼리 기록 정보가 삽입되었습니다
select @id = id, @name = 삽입된 이름;
set @name = @name + Convert(varchar, @id);
set @temp = @id / 2;
학생 값(@name, 18 + @id, @temp, @id)에 삽입;
'학생 추가에 성공했습니다! ';
이동
--데이터 삽입
클래스 값에 삽입('5Class', getDate());
-데이터 쿼리
클래스에서 * 선택;
선택 * ID별 학생 주문;

삽입 트리거는 새로 삽입된 레코드를 삽입된 테이블에 추가합니다.

# 삭제 유형 트리거 생성

--delete 삭제 유형 트리거
if (object_id('tgr_classes_delete', 'TR') is not null)
drop Trigger tgr_classes_delete
go
create Trigger tgr_classes_delete
on 클래스
for delete --delete Trigger
as
print
if ( object_id('classesBackup', 'U')는 null이 아닙니다)
--classesBackup이 존재합니다. 데이터를 직접 삽입합니다
ClassBackup에 삽입하여 이름을 선택하고 삭제된 날짜는 create;
else
--존재하지 않습니다. ClassBackup을 생성한 다음 삭제된 클래스 백업에
select *를 삽입하고
'백업 데이터가 성공했습니다!'를 인쇄합니다. ';
go
--
--영향을 받은 행 수를 표시하지 않습니다
--nocount 설정;
name = '5Class'인 클래스 삭제;
-- 데이터 쿼리
select * fromclass;
select * fromclassesBackup;

삭제 트리거는 데이터 삭제 시 방금 삭제된 데이터를 삭제된 테이블에 저장합니다.

# 업데이트 유형 트리거 생성

--업데이트 업데이트 유형 트리거
if (object_id('tgr_classes_update', 'TR') is not null)
드롭 트리거 tgr_classes_update
go
트리거 tgr_classes_update 생성
클래스
업데이트용
as
선언 @oldName varchar(20), @newName varchar(20);
- -업데이트 전 데이터
@oldName = 삭제된 이름 선택;
if(존재(이름이 '%'+ @oldName + '%'와 같은 학생에서 * 선택))
시작
-The 업데이트된 데이터 SELECT @Newname = 삽입된 이름
학생 집합 이름 업데이트 = '%'+ @o ldname + '%'와 같은 이름으로 대체(name, @OLDNAME, @Newname)                                                          > 인쇄 ';
end
else
print '학생 테이블을 수정할 필요가 없습니다! ';
이동
--데이터 쿼리
ID별로 학생 순서에서 * 선택;
수업에서 * 선택;
수업 세트 이름 업데이트 = '수업 5', 여기서 이름 = '수업 5 ';

업데이트 트리거는 데이터 업데이트 후 삽입된 테이블에 업데이트 전 데이터를 저장하고, 삽입된 테이블에 업데이트된 데이터를 저장합니다.

# 업데이트 열 수준 트리거 업데이트

if (object_id('tgr_classes_update_column', 'TR') is not null)

drop Trigger tgr_classes_update_column

go
트리거 tgr_classes_update_column
클래스
for update
as
--column 레벨 트리거: 클래스 생성 시간 업데이트 여부
if (update(createDate))
start
raisError('시스템 프롬프트: 클래스 생성 시간을 수정할 수 없습니다!', 16, 11);
롤백 tran;
end
go
--테스트
select * from 학생 ID별 순서;
클래스에서 * 선택;
클래스 업데이트 createDate = getDate() 여기서 id = 3;
업데이트 클래스 세트 이름 = 'Class 4' where id = 7;

업데이트 열 수준 트리거는 업데이트를 사용하여 열 레코드를 업데이트할지 여부를 결정할 수 있습니다.

작업(삽입, 업데이트, 삭제)은 트리거 자체의 내용만 실행합니다.

문법 만들기

업데이트 대신

table_name에 트리거 tgr_name
생성
암호화
업데이트 대신...
as
T-SQL

# 대신 생성 트리거

if(object_id('tgr_classes_inteadOf', 'TR')가 null이 아님)
대신 tgr_classes_inteadOf
go
트리거 tgr_classes_inteadOf
생성
트리거를 삭제하세요. delete/*, update, insert*/
as
explain @id int, @name varchar(20);
--삭제된 정보 조회, 값 할당
select @id = id , @ name = 삭제된 이름;
print 'id: ' + Convert(varchar, @id) + ', name: ' + @name;
--학생 정보를 먼저 삭제
cid = @인 학생 삭제 id;
--클래스 정보 삭제
id = @id인 클래스 삭제;
print 'Delete [ id: ' + Convert(varchar, @id) + ', name: ' + @name + ' ] 정보가 성공했습니다! ';
이동
--테스트
ID별로 학생 순서에서 * 선택;
수업에서 * 선택;
ID = 7인 수업 삭제;

 

    # 사용자 정의 메시지 표시 raiseerror

if (object_id('tgr_message', 'TR')가 null이 아님)
  drop Trigger tgr_message
go
트리거 tgr_message 만들기
on 학생
삽입 후 업데이트
as raisError('tgr_message 트리거가 트리거됨', 16, 10);
go
--test
학생 값에 삽입('lily', 22, 1, 7);
학생 세트 성별 = 0 업데이트(여기서 이름 = 'lucy');
ID별로 학생 순서에서 * 선택;

# 트리거 수정

alter Trigger tgr_message
학생에서
삭제 후
as raisError('tgr_message Trigger is Triggered', 16, 10);
go
--test
이름 = 'lucy'인 학생에서 삭제 ;

# 트리거 활성화 및 비활성화

--트리거 비활성화
학생에 대해 트리거 tgr_message 비활성화
--트리거 활성화
학생에 대해 트리거 tgr_message 활성화;

# 생성된 트리거 정보 쿼리

--기존 트리거 쿼리
select * from sys.triggers;
select * from sys.objects where type = 'TR';

--트리거 실행 이벤트 보기
sys.trigger_events에서 te.*를 선택하고 t.object_id = te.object_id
에서 sys.triggers t
에 가입하세요. 여기서 t.parent_class = 0 및 t.name = ' tgr_valid_data';

--생성 트리거 문 보기
exec sp_helptext 'tgr_message';

# 예, 삽입된 데이터 확인

if ((object_id('tgr_valid_data', 'TR')은 null이 아닙니다.))
트리거 tgr_valid_data 삭제
go
트리거 tgr_valid_data
생성
삽입 후
as
생성 @age int 선언,
@name varchar(20);
select @name = s.name, @age = 삽입된 s의 s.age;
if (@age start
raisError('새 데이터의 연령을 삽입하는 데 문제가 있습니다.', 16, 1);
롤백 tran;
end
go
--test
student에 삽입 값('forest', 2, 0, 7);
학생 값('forest', 22, 0, 7)에 삽입;
ID별로 학생 순서에서 *를 선택;

# 예, 작업 로그

if (object_id('log', 'U')가 null이 아님)
drop table log
go
create table log(
id intidentity( 1, 1) 기본 키,
action varchar(20),
createDate datetime 기본 getDate()
)
go
if (exists ( select * from sys.objects where name = ' tgr_student_log'))
트리거 삭제 tgr_student_log
go
트리거 생성 tgr_student_log
학생
삽입 후, 업데이트, 삭제
as
if ((존재(삽입된 항목에서 1개 선택) )) and (exists (삭제된 항목에서 1개 선택)))
시작
로그(작업) 값에 삽입('업데이트됨');
end
else if (존재함(삽입된 항목에서 1개 선택) 존재하지 않음(삭제된 항목에서 1개 선택))
시작
로그(작업) 값에 삽입('삽입됨');
end
else if( 존재하지 않음(삽입된 항목에서 1개 선택) 및 존재함 (삭제된 항목 중 1개 선택))
시작
로그(액션) 값에 삽입('삭제됨');
end
go
-- 테스트
학생 값에 삽입(' king', 22, 1, 7);
학생 세트 성별 = 0 업데이트(여기서 이름 = 'king');
이름 = 'king'인 학생 삭제;
로그에서 * 선택;
선택 *학생부터 아이디순으로 주문;


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.