亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL數(shù)據(jù)庫(kù)的觸發(fā)器和事務(wù)

 更新時(shí)間:2022年08月02日 10:40:32   作者:面屏思過(guò)???????  
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)的觸發(fā)器和事務(wù),觸發(fā)器是SQL?server提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過(guò)程,是由事件來(lái)觸發(fā)

一、觸發(fā)器

概念

觸發(fā)器是SQL server提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過(guò)程,是由事件來(lái)觸發(fā)。觸發(fā)器經(jīng)常用來(lái)加強(qiáng)數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則。

二、 觸發(fā)器的操作

創(chuàng)建account和account_log數(shù)據(jù)表:

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)      
);

觸發(fā)器的增刪改操作

// 語(yǔ)法格式: BEFORE|AFTER    INSERT: 插入 UPDATE:更新  DELETE:刪除
// DELIMITER $
// CREATE TRIGGER 觸發(fā)器名稱
// BEFORE|AFTER INSERT|UPDATE|DELETE
// ON 表名
// FOR EACH ROW
// BEGIN
// 	觸發(fā)器要執(zhí)行的功能;
// END$
// DELIMITER ;


// 創(chuàng)建INSERT型觸發(fā)器。用于對(duì)account表新增數(shù)據(jù)進(jìn)行日志的記錄
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;

觸發(fā)器的查看刪除操作

// 查看標(biāo)準(zhǔn)語(yǔ)法: SHOW TRIGGERS;
// 查看觸發(fā)器
SHOW TRIGGERS;


// 刪除標(biāo)準(zhǔn)語(yǔ)法:DROP TRIGGER 觸發(fā)器名稱;
// 刪除account_delete觸發(fā)器
DROP TRIGGER account_delete;

三、事務(wù)

概念

在關(guān)系數(shù)據(jù)庫(kù)中,一個(gè)事務(wù)可以是一個(gè)SQL語(yǔ)句,一組SQL語(yǔ)句或整個(gè)程序。其特點(diǎn)是這個(gè)單元要么同時(shí)成功要么同時(shí)失敗,單元中的每條 SQL 語(yǔ)句都相互依賴,形成一個(gè)整體。事務(wù)應(yīng)該具有4個(gè)屬性:原子性、一致性、隔離性、持久性。這四個(gè)屬性通常稱為ACID特性

四大特性:

  • 原子性:一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)包含的所有操作要么全部成功,要么全部失敗回滾。
  • 一致性:事務(wù)必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變換到另一個(gè)一致性狀態(tài),也就是說(shuō)一個(gè)事務(wù)執(zhí)行之前和執(zhí)行之后都必須處于一致性狀態(tài)。
  • 隔離性: 當(dāng)多個(gè)用戶并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),比如操作同一張表時(shí),數(shù)據(jù)庫(kù)為每一個(gè)用戶開啟的事務(wù),不能被其他事務(wù)的操作所干擾,多個(gè)并發(fā)事務(wù)之間要相互隔離
  • 持久性: 一個(gè)事務(wù)一旦被提交了,那么對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的改變就是永久性的,即便是在數(shù)據(jù)庫(kù)系統(tǒng)遇到故障的情況下也不會(huì)丟失提交事務(wù)的操作。

四、事務(wù)的操作

基本流程

  • 開啟事務(wù):記錄回滾點(diǎn),并通知服務(wù)器
  • 執(zhí)行SQL語(yǔ)句:執(zhí)行具體的一條或多條sql語(yǔ)句
  • 結(jié)束事務(wù)(提交|回滾):提交:沒(méi)出現(xiàn)問(wèn)題,數(shù)據(jù)進(jìn)行更新;回滾:出現(xiàn)問(wèn)題,數(shù)據(jù)恢復(fù)到開啟事務(wù)時(shí)的狀態(tài)

基礎(chǔ)操作

-- 開啟事務(wù)
START TRANSACTION;

-- 執(zhí)行SQL語(yǔ)句
UPDATE account SET money=money-500 WHERE NAME='張三';

-- 回滾事務(wù)(出現(xiàn)問(wèn)題)
ROLLBACK;

-- 提交事務(wù)(沒(méi)出現(xiàn)問(wèn)題)
COMMIT;

事務(wù)的提交方式

// 查看提交方式
SELECT @@AUTOCOMMIT;  -- 1代表自動(dòng)提交    0代表手動(dòng)提交
// 修改事務(wù)的提交方式
SET @@autocommit=1;

事務(wù)的隔離級(jí)別

四種隔離級(jí)別

  • 讀未提交:read uncommitted
  • 讀已提交:read committed (Oracle/SQL Server 數(shù)據(jù)庫(kù)默認(rèn)級(jí)別)
  • 可重復(fù)讀:repeatable read (MySQL 默認(rèn)級(jí)別)
  • 串行化:serializable

可能引發(fā)問(wèn)題:

  • 臟讀:是指在一個(gè)事務(wù)處理過(guò)程中讀取了另一個(gè)未提交的事務(wù)中的數(shù)據(jù) , 導(dǎo)致兩次查詢結(jié)果不一致
  • 不可重復(fù)讀:是指在一個(gè)事務(wù)處理過(guò)程中讀取了另一個(gè)事務(wù)中修改并已提交的數(shù)據(jù), 導(dǎo)致兩次查詢結(jié)果不一致
  • 幻讀:select 某記錄是否存在,不存在,準(zhǔn)備插入此記錄,但執(zhí)行 insert 時(shí)發(fā)現(xiàn)此記錄已存在,無(wú)法插入?;虿淮嬖趫?zhí)行delete刪除,卻發(fā)現(xiàn)刪除成功

隔離操作

// 查詢數(shù)據(jù)庫(kù)隔離級(jí)別
SELECT @@TX_ISOLATION;

// 修改數(shù)據(jù)庫(kù)隔離級(jí)別
SET GLOBAL TRANSACTION ISOLATION LEVEL 級(jí)別字符串;

注意:隔離級(jí)別從小到大安全性越來(lái)越高,但是效率越來(lái)越低 , 所以不建議使用READ UNCOMMITTED 和 SERIALIZABLE 隔離級(jí)別.

到此這篇關(guān)于MySQL數(shù)據(jù)庫(kù)的觸發(fā)器和事務(wù)的文章就介紹到這了,更多相關(guān)MySQL 觸發(fā)器和事務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • CentOS系統(tǒng)中MySQL5.1升級(jí)至5.5.36

    CentOS系統(tǒng)中MySQL5.1升級(jí)至5.5.36

    有相關(guān)測(cè)試數(shù)據(jù)說(shuō)明從5.1到5.5+,MySQL性能會(huì)有明顯的提升,具體的需要自己建立測(cè)試環(huán)境去實(shí)踐下,今天我們就來(lái)操作下,并記錄下來(lái)升級(jí)的具體步驟
    2017-07-07
  • MySQL replace into 語(yǔ)句淺析(一)

    MySQL replace into 語(yǔ)句淺析(一)

    這篇文章主要介紹了MySQL replace into 語(yǔ)句淺析(一),本文講解了replace into的原理、使用方法及使用的場(chǎng)景和使用示例,需要的朋友可以參考下
    2015-05-05
  • Mysql更新自增主鍵id遇到的問(wèn)題

    Mysql更新自增主鍵id遇到的問(wèn)題

    本文主要介紹了Mysql更新自增主鍵id遇到的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>
    2021-11-11
  • linux下源碼安裝mysql5.6.20教程

    linux下源碼安裝mysql5.6.20教程

    這篇文章主要為大家詳細(xì)介紹了linux下源碼安裝mysql5.6.20教程的相關(guān)資料,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 簡(jiǎn)單介紹下MYSQL的索引類型

    簡(jiǎn)單介紹下MYSQL的索引類型

    本文介紹了七種MySQL索引類型。在數(shù)據(jù)庫(kù)表中,對(duì)字段建立索引可以大大提高查詢速度。通過(guò)善用這些索引,可以令MySQL的查詢和運(yùn)行更加高效。
    2015-07-07
  • MySQL查詢條件中放置on和where的區(qū)別分析

    MySQL查詢條件中放置on和where的區(qū)別分析

    這篇文章主要給大家介紹了關(guān)于MySQL查詢條件中放置on和where的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • mysql查詢FIND_IN_SET?REGEXP實(shí)踐示例

    mysql查詢FIND_IN_SET?REGEXP實(shí)踐示例

    這篇文章主要為大家介紹了mysql查詢FIND_IN_SET?REGEXP實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • MySQL execute、executeUpdate、executeQuery三者的區(qū)別

    MySQL execute、executeUpdate、executeQuery三者的區(qū)別

    這篇文章主要介紹了MySQL execute、executeUpdate、executeQuery三者的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 定時(shí)備份mysql, 定時(shí)切割nginx access log的方法

    定時(shí)備份mysql, 定時(shí)切割nginx access log的方法

    定時(shí)備份mysql, 定時(shí)切割nginx access log的方法,需要的朋友可以參考下。
    2011-09-09
  • MySQL學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)備份詳解

    MySQL學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)備份詳解

    本篇文章主要介紹了MySQL中的 數(shù)據(jù)庫(kù)備份詳解,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-09-09

最新評(píng)論