数据库相关知识以及命令语句(二)

事务

一、概念:
  如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。

  1. 开启事务:start transaction;
  2. 设置回滚点:savepoint rollbackpointname
  3. 回滚:rollback (to rollbackpointname);
  4. 提交:commit;

事务提交后 事务的操作持久化 回滚点消失

查看事务的默认提交方式:select @@autocommit;----1 代表自动提交 0 代表手动提交
修改默认提交方式: set @@autocommit = 0;
事务提交的两种方式:
①自动提交: mysql就是自动提交的 ; 一条DML(增删改)语句会自动提交一次事务。
②手动提交: Oracle 数据库默认是手动提交事务 ; 需要先开启事务,再提交

二、事务的四大特征(ACID)

  1. 原子性A:是不可分割的最小操作单位,要么同时成功,要么同时失败。
  2. 持久性C:当事务提交或回滚后,数据库会持久化的保存数据。
  3. 隔离性I:多个事务之间。相互独立。
  4. 一致性D:事务操作前后,状态不变。

三、事务隔离级别
  概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。

  • 脏读:一个事务,读取到另一个事务中没有提交的数据
  • 不可重复读(虚读) :在同一个事务中,两次读取到的数据不一样。
  • 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修 改。

隔离级别

  1. read uncommitted:读未提交
      产生的问题:脏读、不可重复读、幻读
  2. read committed:读已提交 (Oracle)
      产生的问题:不可重复读、幻读
  3. repeatable read:可重复读 (MySQL默认)
      产生的问题:幻读
  4. serializable:串行化
      可以解决所有的问题

注意:隔离级别从小到大安全性越来越高,但是效率越来越低
数据库查询隔离级别: select @@transaction_isolation; 数据库设置隔离级别:
set session transaction isolation level 级别字符串;
set global transaction isolation level 级别字符串;

存储过程

存储过程,带有逻辑的sql语句,之前的sql没有条件判断,没有循环,存储过程带上流程控制语句(if while)。
特点
1)执行效率非常快!存储过程是在数据库的服务器端执行的。
2)移植性很差!不同数据库的存储过程是不能移植。
创建存储过程

delimiter $  -- 声明存储过程的结束符$
create procedure pro_test()
begin
sql语句
end$

-- 执行存储过程
call pro_test();

触发器

当操作了某张表时,希望同时触发一些动作/行为,可以使用触发器完成。(由动作1发生引起动作2执行)。一种特殊的存储过程,能够完成特定的功能、存储再数据库服务器上的SQL片段无需调用,自动的。主要用于日志记录,数据校验等。现在触发器只支持行级触发,不支持语句级触发。

  • 什么条件触发(事件):I、D、U
  • 什么时候触发:增删改前或后
  • 触发频率:针对每一行执行
  • 触发器定义表上或附着表上

触发器四大要素
监视地点、监视事件、触发时间、触发事件

# 创建触发器
create trigger 触发名 before|after 触发事件
on 表名 for each row 
# 只有一条执行语句 不需要begin、end
begin
执行语句;
end
# 查看触发器
show triggers
# 删除触发器
drop trigger if exists 触发器名

NEW、OLD

触发了触发器的那行数据,来引用触发器中发生变化的记录内容。

# insert只有new
create trigger trigger_test after insert
on user for each row 
insert into user_logs values(NULL, now(), concat('有用户添加,信息为:'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值