찾다
데이터 베이스MySQL 튜토리얼MySQL 데이터베이스에서 트리거 및 트랜잭션을 적용하는 방법

1. Trigger

Concept

Trigger는 데이터 무결성을 보장하기 위해 SQL 서버에서 제공하는 방법으로, 이벤트에 의해 트리거됩니다. 트리거는 데이터 무결성 제약 조건과 비즈니스 규칙을 적용하는 데 자주 사용됩니다.

2. 트리거 작업

계정 및 account_log 데이터 테이블 만들기:

CREATE TABLE account(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),			
	money DOUBL
);
INSERT INTO account VALUES (NULL,'张三',1000),(NULL,'李四',1000);
CREATE TABLE account_log(
	id INT PRIMARY KEY AUTO_INCREMENT,
	operation VARCHAR(20),			
	operation_time DATETIME,		
	operation_id INT,			
	operation_params VARCHAR(200)      
);

트리거 작업 추가, 삭제 및 수정

// 语法格式: BEFORE|AFTER    INSERT: 插入 UPDATE:更新  DELETE:删除
// DELIMITER $
// CREATE TRIGGER 触发器名称
// BEFORE|AFTER INSERT|UPDATE|DELETE
// ON 表名
// FOR EACH ROW
// BEGIN
// 	触发器要执行的功能;
// END$
// DELIMITER ;


// 创建INSERT型触发器。用于对account表新增数据进行日志的记录
DELIMITER $

CREATE TRIGGER account_insert
AFTER INSERT
ON account
FOR EACH ROW
BEGIN
	INSERT INTO account_log VALUES (NULL,'INSERT',NOW(),new.id,CONCAT('插入后{id=',new.id,',name=',new.name,',money=',new.money,'}'));
END $

DELIMITER ;

// 向account表添加一条记录
INSERT INTO account VALUES (NULL, '王五', 2000);

// 查询account表
SELECT * FROM account;

트리거 작업 보기 및 삭제

// 查看标准语法: SHOW TRIGGERS;
// 查看触发器
SHOW TRIGGERS;


// 删除标准语法:DROP TRIGGER 触发器名称;
// 删除account_delete触发器
DROP TRIGGER account_delete;

3. 관계 데이터베이스에서 트랜잭션은 SQL 문, SQL 문 집합 또는 전체 프로그램이 될 수 있습니다. 특징은 이 단위가 동시에 성공하거나 실패하며, 단위의 각 SQL 문이 서로 의존하여 전체를 형성한다는 것입니다. 트랜잭션에는 원자성, 일관성, 격리성, 내구성이라는 네 가지 속성이 있어야 합니다. 이 네 가지 속성을 흔히

ACID 속성

이라고 합니다.

네 가지 주요 기능:

원자성:
    트랜잭션에 포함된 모든 작업은 성공하거나 실패할 경우 롤백됩니다.
  • 일관성:
  • 트랜잭션은 데이터베이스를 하나의 일관성 상태에서 다른 일관성 상태로 변경해야 합니다. 즉, 트랜잭션은 실행 전후에 일관된 상태에 있어야 합니다.
  • 격리:
  • 동일한 테이블을 운영하는 경우와 같이 여러 사용자가 동시에 데이터베이스에 액세스하는 경우 각 사용자에 대해 데이터베이스에서 열린 트랜잭션은 다른 트랜잭션의 작업에 의해 방해를 받을 수 없습니다. 여러 동시 트랜잭션은 분리되어야 합니다. 격리
  • 지속성:
  • 일단 트랜잭션이 제출되면 데이터베이스의 데이터 변경 사항은 영구적입니다. 데이터베이스 시스템에 오류가 발생하더라도 트랜잭션 제출 작업은 손실되지 않습니다.
  • 4. 트랜잭션 작업

  • 기본 프로세스

트랜잭션 시작:
    롤백 지점을 기록하고 서버에 알림
  • SQL 문 실행:
  • 하나 이상의 특정 SQL 문 실행
  • 트랜잭션 종료(제출|롤백): 제출
  • : 문제 발생하지 않음, 데이터가 업데이트됨
  • Rollback

    : 문제 발생, 데이터가 트랜잭션이 시작되었을 때의 상태로 복원됨기본 작업

    -- 开启事务
    START TRANSACTION;
    
    -- 执行SQL语句
    UPDATE account SET money=money-500 WHERE NAME='张三';
    
    -- 回滚事务(出现问题)
    ROLLBACK;
    
    -- 提交事务(没出现问题)
    COMMIT;
  • 트랜잭션 제출 방법
// 查看提交方式
SELECT @@AUTOCOMMIT;  -- 1代表自动提交    0代表手动提交
// 修改事务的提交方式
SET @@autocommit=1;

트랜잭션 격리 수준

4가지 격리 수준

커밋되지 않은 읽기:
    커밋되지 않은 읽기
  • 커밋된 읽기:
  • 커밋된 읽기(Oracle/SQL Server 데이터베이스 기본 수준)
  • 반복 읽기:
  • 반복 읽기(MySQL 기본 수준)
  • Serialized
  • 문제가 발생할 수 있음:

더티 읽기:

는 커밋되지 않은 다른 데이터를 의미합니다. 한 트랜잭션 중에 ted 트랜잭션을 읽었습니다.
  • 반복 불가능한 읽기:

    한 트랜잭션 중에 다른 트랜잭션에서 데이터를 읽는 것을 의미합니다. 수정되어 제출된 데이터로 인해 두 쿼리 간에 일치하지 않는 쿼리 결과가 발생했습니다
  • 팬텀 읽기:

    특정 레코드가 존재하는지 선택하세요. 이 레코드를 삽입하려고 준비했는데, 삽입 실행 시 이 레코드가 이미 존재하여 삽입할 수 없는 것을 발견했습니다. 또는 삭제 삭제가 존재하지 않는데 삭제가 성공한 것으로 확인됨
  • 격리 작업

    // 查询数据库隔离级别
    SELECT @@TX_ISOLATION;
    
    // 修改数据库隔离级别
    SET GLOBAL TRANSACTION ISOLATION LEVEL 级别字符串;

  • 참고:
소규모에서 대규모로 격리 수준이 점점 높아지지만 효율성은 점점 낮아지고 있습니다. 이므로 READ UNCOMMITTED 및 SERIALIZABLE 격리 수준을 사용하지 않는 것이 좋습니다.

위 내용은 MySQL 데이터베이스에서 트리거 및 트랜잭션을 적용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
图文详解mysql架构原理图文详解mysql架构原理May 17, 2022 pm 05:54 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

See all articles

핫 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를 무료로 생성하십시오.

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

mPDF

mPDF

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

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기