zoukankan      html  css  js  c++  java
  • 事务,视图 ,函数,存储过程,触发器

    1, 事务:

        一组操作, 要么都成功, 要么都失败
            
        特性:
                原子性: 一组操作, 要么都成功, 要么都失败
                一致性(Consistency):指事务发生前和发生后,数据的总额依然匹配
                隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的
                持久性(Durability):当事务完成后,其影响应该保留下来,不能撤消,只能通过“另开起一个事物”来抵消之前的错误

      关键字:begin,for update,commit
          begin; # 开启事务
          select * from emp where id = 1 for update; # 查询id值,for update添加行锁;
          update emp set salary=10000 where id = 1; # 完成更新
          commit; # 提交事务,此时锁才结束
       场景:
                思考:
                    我去银行给朋友汇款,
                    我卡上有1000元,
                    朋友卡上500元,
                    我给朋友转账100元(无手续费),
                    如果,网线断了, 我的钱刚扣,而朋友的钱又没加时, 怎么办?
                
                create table t11 (
                    id int auto_increment primary key,
                    name varchar(32) not null default '',
                    money int not null default 0
                )engine=Innodb  charset=utf8;
                
                insert into t11 (name,money) values ('zekai', 1000), ('eagon', 500);
                
            
         解决方法:
            
                开启事务 (start transaction)
                (执行sql操作)
                commit : 提交上面的SQL, 让其生效
                rollback: 回滚
                show full tables;  显示全部类型

     

    2,视图 :


    产生的原因:
    如果有一个SQL语句频繁的会被使用到,比如说: select * from t4 where id>12 and id <24; 搞一个映射,或者取一个别名 select * from t4 where id>12 and id <24 === > v1
    查看视图: select
    * from v1; 创建视图: create view v1 as select * from t4 where id>12 and id <24; 修改视图:
    alter view v1 as sql语句;
    删除视图:
    drop view v1; 问题: 如果原生的表数据发生了变化, 那视图会不会发生变化? 也会变化 视图中的数据会不会发生修改? 不会发生修改 应用场景: MySQL: (DBA) 生成视图View    程序: 调用 select
    * from v1;

     

    3,函数:

    不要轻易使用
            
    在程序中, 用代码计算, 计算好了, 再传给SQL语句执行

     

    4,存储过程 : 

      

    将一大堆 SQL 语句进行封装, 类似于函数, 结果就是存储过程 MySQL服务端: DBA (写)
    a. 简单的存储过程: delimiter // create procedure p1() BEGIN select * from t11; END // delimiter ; # 结束之后记得再改回来,不然后面结束符就都是// 程序: call p1(); b. 传参数: (in) delimiter // create procedure p2( in n1 int, in n2 int ) BEGIN select * from t11 where id > n1; END // delimiter ; 程序: call p2(12, 2) c. 传入参数: (out) delimiter // create procedure p3( in n1 int, out n2 int ) BEGIN select * from t11 where id > n1; set n2 = 1; END // delimiter ; set @v2=123212; call p3(12, @v2); select @v2;

     

    5 , 触发器  :

        在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器

        例如 : 向用户表中添加一条数据的同时, 在日志表中也添加一条记录 delimiter
    // CREATE TRIGGER t1 BEFORE INSERT ON t7 FOR EACH ROW BEGIN insert into t11 (name, money) values ('xxx', 1234); END // delimiter ;

  • 相关阅读:
    Huawei vlan 配置及vlan 间通讯
    Huawei DHCP 中继配置实例
    Huawei DHCP 全局配置与接口配置
    Cisco DHCP 配置方法
    VS Code的golang开发配置 之 代码提示
    天气服务API文档 第1版
    Android 让图片等比例缩放的三种方法
    Jar mismatch! Fix your dependencies
    android ActionBarSherlock使用说明
    Only the original thread that created a view hierarchy can touch its views.
  • 原文地址:https://www.cnblogs.com/HZLS/p/11046083.html
Copyright © 2011-2022 走看看