• MySQL 连接 触发器 函数 视图 存储过程


    左连接:左表无限制,都显示,右表对应数据显示,其他为空

    右连接:右表无限制,都显示,左表对应数据显示,其他为空

    内连接:显示两表对应的数据,有一侧为空都不显示。

    外连接:两表都无限制,数据都显示,都可为空。

    触发器:触发器是一个特殊的存储过程,它是MySQL在insert、update、delete的时候自动执行的代码块。

    create trigger trigger_name
    after/before insert/update/delete on 表名
    for each row
    begin
    sql语句:(触发的语句一句或多句)
    end

    *MySQL 的触发器中不能对本表进行 insert、update 和 delete 操作,否则会报错

    函数:MySQL中提供了许多内置函数,还可以自定义函数(实现程序员需要sql逻辑处理)

    自定义函数:
    
    创建:CREATE FUNCTION 函数名称(参数列表)  
         RETURNS 返回值类型  
             函数体
    
    调用:SELECT 函数名称(参数列表)
    
    
    修改: ALTER FUNCTION 函数名称 [characteristic ...]
    删除:DROP FUNCTION [IF EXISTS] 函数名称
    出错信息:
    
    ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
    原因:
    
    这是我们开启了bin-log, 我们就必须指定我们的函数是否是
    
    1 DETERMINISTIC 不确定的
    
    2 NO SQL 没有SQl语句,当然也不会修改数据
    
    3 READS SQL DATA 只是读取数据,当然也不会修改数据
    
    4 MODIFIES SQL DATA 要修改数据
    
    5 CONTAINS SQL 包含了SQL语句
    
    其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
    
    解决方法:
    SQL code
    mysql> show variables like 'log_bin_trust_function_creators';
    +---------------------------------+-------+
    | Variable_name          | Value |
    +---------------------------------+-------+
    | log_bin_trust_function_creators | OFF  |
    +---------------------------------+-------+
    mysql> set global log_bin_trust_function_creators=1;
    mysql> show variables like 'log_bin_trust_function_creators';
    +---------------------------------+-------+
    | Variable_name          | Value |
    +---------------------------------+-------+
    | log_bin_trust_function_creators | ON  |
    这样添加了参数以后,如果mysqld重启,那个参数又会消失,因此记得在my.cnf配置文件中添加:
    log_bin_trust_function_creators=1
    
    创建函数报错
    创建函数报错

    视图:视图是由查询结果形成的一张虚拟表,是表通过某种运算得到的一个投影

    create view view_name as select 语句

    *视图只是一条预编译的SQL语句,并不保存实际数据 

    存储过程:把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现(经过第一次编译后再次调用不需要再次编译,比一个个执行sql语句效率高)

    create procedure 存储过程名(参数,参数,…)
       begin
       //代码
       end
    
    call 存储过程名(参数...)
    #1. 准备表
    create table s1(
    id int,
    name varchar(20),
    gender char(6),
    email varchar(50)
    );
    
    #2. 创建存储过程,实现批量插入记录
    delimiter $$ #声明存储过程的结束符号为$$
    create procedure auto_insert1()
    BEGIN
        declare i int default 1;
        while(i<30)do
            insert into s1 values(i,'eva','female',concat('eva',i,'@oldboy'));
            set i=i+1;
        end while;
    END$$ #$$结束
    delimiter ; #重新声明分号为结束符号
    
    #3. 查看存储过程
    show create procedure auto_insert1G 
    
    #4. 调用存储过程
    call auto_insert1();

    搬运内容,方便查询

    
    
  • 相关阅读:
    生日蜡烛——第七届蓝桥杯C语言B组(省赛)第二题
    积分之谜——第六届蓝桥杯C语言B组(国赛)第一题
    平方十位数——第八届蓝桥杯JavaB组(国赛)第一题
    激光样式——第九届蓝桥杯C语言B组(国赛)第二题
    换零钞——第九届蓝桥杯C语言B组(国赛)第一题
    煤球数目——第七届蓝桥杯C语言B组(省赛)第一题
    扫描算法(SCAN)——磁盘调度管理
    最短寻道优先算法(SSTF)——磁盘调度管理
    最近最少使用算法(LRU)——页面置换
    ssm返回jsonp数据格式
  • 原文地址:https://www.cnblogs.com/mu-tang/p/14614621.html
Copyright © 2020-2023  润新知