zoukankan      html  css  js  c++  java
  • mysql三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法

    1 MySql中的三元运算符有两种方法:

    1、case when 条件 then (条件为true时执行) else(条件为false时执行) end;/*end不可少*/

    2、select *,if(expr1,expr2,expr3) from 表名;

    实例:SELECT if(isnull(sum(c.MONEY)),0,sum(c.MONEY)) AS m1 FROM Table

     

    2 上下连表:

    select 列名,列名 from 表名 

    union 

    select 列名,列名 from 表名;

    这连表方法自动去重,如果不想去重,则union改成 union all。 需要注意的是上下连表的 所连接的表的列数目需要相同。

    3 视图

    MYSQL语句:

    CREATE VIEW  视图名 AS SELECT 列名 FROM 表名 WHERE 条件;

    ALTER VIEW  视图名 AS SELECT 列名 FROM 表名 WHERE 条件;

    视图是一张虚拟表,动态的随着原始表更新而更新;

    4 触发器

    触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。

    CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt

    trigger_name:触发器的名称

    tirgger_time:触发时机,

    为BEFORE或者AFTER

    trigger_event:触发事件,为INSERT、DELETE或者UPDATE

    tb_name:表示建立触发器的表名,就是在哪张表上建立触发器

    trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句 所以可以说MySQL创建以下六种触发器: BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE AFTER INSERT,AFTER DELETE,AFTER UPDATE

    mysql> DELIMITER //
    mysql> CREATE TRIGGER demo BEFORE DELETE ON users FOR EACH ROW BEGIN INSERT INTO logs VALUES(NOW());  
    INSERT INTO logs VALUES(NOW()); END //
    mysql> DELIMITER ;
    DELIMITER 用于修改结束语句的符号,上例就是将符号改为//,结尾又改回来了,目的是为了触发器里面的触发语句不引发错误。
    NEW.columnname:新增行的某列数据
    OLD.columnname:删除行的某列数据

     更多的触发器实例以及详细讲解 

    5 函数

    MySQL中提供了许多内置函数

    https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html

    自定义函数
    delimiter \ create function f1( i1 int, i2 int) returns int BEGIN declare num int; set num = i1 + i2; return(num); END \ delimiter ;

    删除函数
    drop function func_name;

    执行函数
    获取返回值
    declare @i VARCHAR(32);
    select UPPER('alex') into @i;
    SELECT @i;
    
    
    在查询中使用
    select f1(11,nid) ,name from tb2;

    6 执行过程

    存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。
    创建存储过程
    
    delimiter //
    create procedure p1()
    BEGIN
        select * from t1;
    END//
    delimiter ;
    
    执行存储过程
    
    call p1()

    创建有参数的存储过程,

      in          仅用于传入参数用

      out        仅用于返回值用

      inout     既可以传入又可以当作返回值

    delimiter \
    create procedure p1(
        in i1 int,
        in i2 int,
        inout i3 int,
        out r1 int
    )
    BEGIN
        DECLARE temp1 int;
        DECLARE temp2 int default 0;
        
        set temp1 = 1;
    
        set r1 = i1 + i2 + temp1 + temp2;
        
        set i3 = i3 + 100;
    
    end\
    delimiter ;
    
    -- 执行存储过程
    set @t1 =4;
    set @t2 = 0;
    CALL p1 (1, 2 ,@t1, @t2);
    SELECT @t1,@t2;

    解释: set @ti =4,set 是赋值的key word,@代表这个关键字是定义域是session,t1是变量名字。

    7 事务

       1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

       2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

       3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

       4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

    delimiter \
    create PROCEDURE p1(     -- procedure 关键字,字义 程序
        OUT p_return_code tinyint       --  全session的变量  短整数类型。
    )
    BEGIN 
      DECLARE exit handler for sqlexception   --mysql的异常处理,declare (声明) exit(退出这个存储过程)
          handler for sqlexception  --出现sqlception 时
    BEGIN -- ERROR set p_return_code = 1; rollback; 
    END;
    DECLARE exit handler for sqlwarning BEGIN -- WARNING set p_return_code = 2;
    rollback; END; START TRANSACTION; ---START TRANSACTION 或 BEGIN 开启事务
    DELETE from tb1;
    insert into tb2(name)values('seven');
    COMMIT; --提交事务(关闭事务)
    -- SUCCESS
    set p_return_code = 0;
    END\
    delimiter ;

    mysql异常处理详解

  • 相关阅读:
    PAT (Advanced Level) Practice 1071 Speech Patterns (25分)
    PAT (Advanced Level) Practice 1070 Mooncake (25分)
    PAT (Advanced Level) Practice 1069 The Black Hole of Numbers (20分)
    PAT (Advanced Level) Practice 1074 Reversing Linked List (25分)
    PAT (Advanced Level) Practice 1073 Scientific Notation (20分)
    第一次冲刺个人总结01
    构建之法阅读笔记01
    人月神话阅读笔记01
    四则运算2
    学习进度条(软件工程概论1-8周)
  • 原文地址:https://www.cnblogs.com/yuanji2018/p/9692115.html
Copyright © 2011-2022 走看看