MySQL数据库的触发器和事务
触发器是SQL server提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,是由事件来触发。触发器经常用来加强数据的完整性约束和业务规则。
二、 触发器的操作创建account和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;
// 删除标准语法:DROP TRIGGER 触发器名称;
// 删除account_delete触发器
DROP TRIGGER account_delete;
在关系数据库中,一个事务可以是一个SQL语句,一组SQL语句或整个程序。其特点是这个单元要么同时成功要么同时失败,单元中的每条 SQL 语句都相互依赖,形成一个整体。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
四大特性:
原子性:一个事务是一个不可分割的工作单位,事务包含的所有操作要么全部成功,要么全部失败回滚。 一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 隔离性: 当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离 持久性: 一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。 四、事务的操作 开启事务:记录回滚点,并通知服务器 执行SQL语句:执行具体的一条或多条sql语句 结束事务(提交|回滚):提交:没出现问题,数据进行更新;回滚:出现问题,数据恢复到开启事务时的状态 开启事务START TRANSACTION;
执行SQL语句
UPDATE account SET money=money-500 WHERE NAME= 张三
回滚事务(出现问题)
ROLLBACK;
提交事务(没出现问题)
COMMIT;
SELECT @@AUTOCOMMIT; 1代表自动提交 0代表手动提交
// 修改事务的提交方式
SET @@autocommit=1; 事务的隔离级别
四种隔离级别
读未提交:read uncommitted 读已提交:read committed (Oracle/SQL Server 数据库默认级别) 可重复读:repeatable read (MySQL 默认级别) 串行化:serializable可能引发问题:
脏读:是指在一个事务处理过程中读取了另一个未提交的事务中的数据 , 导致两次查询结果不一致 不可重复读:是指在一个事务处理过程中读取了另一个事务中修改并已提交的数据, 导致两次查询结果不一致 幻读:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入。或不存在执行delete删除,却发现删除成功 // 查询数据库隔离级别SELECT @@TX_ISOLATION;
// 修改数据库隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 级别字符串;
注意:隔离级别从小到大安全性越来越高,但是效率越来越低 , 所以不建议使用READ UNCOMMITTED 和 SERIALIZABLE 隔离级别.
到此这篇关于MySQL数据库的触发器和事务的文章就介绍到这了,更多相关MySQL 触发器和事务内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 MySQL数据库的触发器和事务
相关文章
- MySQL(十一)之触发器详解数据库
- Oracle,sqlserver,mySQl的区别和联系:详解数据库
- MySQL数据库:完整的PDF指南(mysql数据库pdf)
- 中恢复恢复MySQL数据库:解决灾难恢复问题(mysql从备份)
- MySQL Status Connection_errors_internal 数据库状态作用意思及如何正确
- 的迁移从MySQL到Oracle的数据库迁移(mysql到oracle)
- 的性能优化MySQL高并发锁的性能提升之道(mysql高并发锁)
- C语言连接MySQL数据库实现快速网络查询(c链接mysql数据库)
- 利用MySQL枚举字段实现数据安全(mysql枚举字段)
- MySQL中操作二进制数据的方法(mysql二进制数据)
- MySQL实现减法运算方法详解(mysql减法运算)
- 在阿里云上轻松部署MySQL数据库(阿里云装mysql)
- MySQL浏览器:快速轻松的数据库管理方式(mysql浏览器)
- MySQL大数据库备份:简单、快捷、可靠(mysql大数据库备份)
- MySQL索引强制使用:提升数据库性能(mysql强制使用索引)
- 如何创建MySQL触发器?一份详细指南。(mysql触发器创建)
- MySQL电商数据库设计:优化网站性能、提升用户体验(mysql电商数据库设计)
- 快速上手:Linux下如何搭建MySQL数据库(linux下搭建mysql)
- 使用MySQL本地系统账户管理您的数据库(mysql本地系统账户)
- MySQL 24小时:稳定可靠的数据库服务(mysql 24小时)
- MySQL如何快速建立数据库连接(mysql创建数据库连接)
- MySQL 数据表对比分析工具优势分析(mysql数据表对比工具)
- MySQL数据库:掌握操作指令的必备法宝(mysql数据库操作命令)
- MySQL数据库如何轻松导出(mysql数据库怎么导出)
- MySQL使用代码快速创建数据库(mysql创建数据库代码)
- MySQL中如何修改表格约束(mysql中修改约束)
- MySQL数据库中的CSV文件存取简单可靠(csv mysql数据库)
- 安卓手机与MySQL数据库实现无缝连接(a安卓连接mysql)
- MySQL中实现包含特定词的搜索功能(mysql中包含某个词)
- 深入探究MySQL数据库技术,了解丁奇的贡献(mysql 丁奇)
- 深入解析MySQL每秒可读取数多少次(mysql一秒可以读几次)
- MySQL初始化遇卡住试试这些解决办法(mysql_init卡住)
- MySQL数据库下载86位版本(mysql下载x86位)
- MySQL不支持text类型数据,这将如何影响数据库管理系统(mysql不支持text)