文档章节

mysql视图/存储过程/函数/事件/触发器

坦途abc
 坦途abc
发布于 07/19 18:38
字数 567
阅读 5
收藏 8

--语法参考:https://dev.mysql.com/doc/   (当前用的是5.6)

https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-data-manipulation.html

--视图

CREATE VIEW test.v AS SELECT * FROM t;

 --存储过程

CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type    

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
    Valid SQL routine statement

--新建存储过程

delimiter //
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END//
delimiter ;

--调用存储过程
CALL simpleproc(@a);    

--函数
CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
    Valid SQL routine statement

--新建函数
CREATE FUNCTION hello (s CHAR(20))
    RETURNS CHAR(50) DETERMINISTIC
    RETURN CONCAT('Hello, ',s,'!');
--使用函数
SELECT hello('world');

 

--事件
CREATE
    [DEFINER = { user | CURRENT_USER }]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    DO event_body;

schedule:
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

用法一:
CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      UPDATE myschema.mytable SET mycol = mycol + 1;


用法二:
CREATE EVENT e_totals
    ON SCHEDULE AT '2006-02-10 23:59:00'
    DO INSERT INTO test.totals VALUES (NOW());      

用法三:
delimiter |

CREATE EVENT e_daily
    ON SCHEDULE
      EVERY 1 DAY
    COMMENT 'Saves total number of sessions then clears the table each day'
    DO
      BEGIN
        INSERT INTO site_activity.totals (time, total)
          SELECT CURRENT_TIMESTAMP, COUNT(*)
            FROM site_activity.sessions;
        DELETE FROM site_activity.sessions;
      END |

delimiter ;

用法四:
CREATE EVENT e_call_myproc
    ON SCHEDULE
      AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
    DO CALL myproc(5, 27);

 

--触发器
    
CREATE
    [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name
    trigger_time trigger_event
    ON tbl_name FOR EACH ROW
    trigger_body

trigger_time: { BEFORE | AFTER }  #BEFORE:先触发触发器,再执行操作 | AFTER:执行完操作再触发触发器

trigger_event: { INSERT | UPDATE | DELETE }
    
    

CREATE TABLE classification_log
(
    id BIGINT(20),
    note varchar(128),
    utime datetime default NOW()
)
--插入时,触发器记录日志记录日志
CREATE TRIGGER tri_classification
AFTER INSERT ON document_classification
FOR EACH ROW
BEGIN

INSERT classification_log(id , note)
VALUES(new.id,'新插入id');
END;
    
--修改时,触发器记录日志记录日志
CREATE TRIGGER tri_classificationx3
AFTER UPDATE ON classification_log2
FOR EACH ROW
BEGIN

INSERT classification_log(id , note)
VALUES(old.id,'修改前');

INSERT classification_log(id , note)
VALUES(new.id,'修改后');
END;
    
--删除时,触发器记录日志记录日志
CREATE TRIGGER tri_classificationx4
AFTER DELETE ON classification_log2
FOR EACH ROW
BEGIN

INSERT classification_log(id , note)
VALUES(old.id,'删除前');

END;

 

© 著作权归作者所有

共有 人打赏支持
坦途abc
粉丝 3
博文 67
码字总数 79048
作品 0
海淀
程序员
mysql的存储过程 事件 触发器 视图 等的概念

内容来源: http://www.cnblogs.com/cac2020/p/6026511.html 表:里面存储的都是真实的数据视图:就是一个表或者多个表的一个映射,一般只做查询使用。比如你想要的数据存在两个表里,但你查...

JAVA码猿
2017/11/06
0
0
《MySQL必知必会》读书笔记(四) 22~30章 完结篇

1、视图 视图不包含表中应该有的任何列或数据,它包含的是一个SQL查询。在视图创建之后,可以用于表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视...

一万
2016/02/08
329
0
MySQL之视图、存储过程、触发器、函数、事务、动态执行SQL

视图 视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,并可以将其当作表来使用。 创建视图: create v...

AltBoy
2017/06/11
0
0
Navicat Mac 快捷键有哪些

Navicat 是数据库管理工具,满足了大家对数据库的存储过程、事件、触发器、函数、视图等功能,并且支持MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 数据库。对于Windows,mac...

Navicat数据库管理工具
2016/06/13
201
0
mysql查看所有存储过程,函数,视图,触发器,表

查询数据库中的存储过程和函数 方法一: select from mysql.proc where db = 'yourdbname' and = 'PROCEDURE' //存储过程 select from mysql.proc where db = 'yourdbname' and = 'FUNCTION......

余二五
2017/11/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
4
0
现场看路演了!

HiBlock
昨天
14
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
9
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
19
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部