mysql数据库基本操作(基本操作总结、视图、触发器、函数、存储过程、事件调度器)

基本sql语句库操作 表操作记录操作

 

视图,存储过程、触发器,https://www.cnblogs.com/clschao/articles/10034539.html

 

基本sql语句 

  •  数据库的常用sql语句可以大致分为三部分:
    • DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
    • DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
    • DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

 

库操作

 

 

 

表操作

数据引擎简介

数据库中,文件是以表的形式进行存储的,而文件的类型不是单一的,而类型不同的数据引擎满足了不同文件类型的存储和使用需要。

单表操作

增删改查

 

 

记录操作

 

多表查询操作

简单多表查询

利用select和限制条件,实现多表查询。注意在使用过程中,一定要找到两个表中相互关联的字段,并且作为限制条件。

基本语法:

  1.  SELECT 表1.字段1名,表1.字段2名,表2.字段1名,表2.字段2名…… FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件
  2.  select  表1别名.字段1名,表2别名.字段1名……from 表1  as  表1别名,表2  as  表2别名 … where 表1别名.字段 = 表2别名.字段 and 其它查询条件      (当表名较复杂时,可用简写代替,中间as 可以省略)

 

联合查询(子查询,包括单表多表)

 

union对象的数据结构必须是一致的

基本语法:

 

 

 

连表查询

基本语法:

SELECT 字段1、字段2、字段3……  FROM 表1  JOIN类型  表2   ON 表1.字段 = 表2.字段;   (join类型包括 inner join 、left join 、right join )

inner join,只显示符合条件的信息,执行效果类似于简单多表查询

left join, 它是以左侧的表为基准故称左连接,左侧表中所有信息将被全部输出,而右侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL

right join,它是以右侧的表为基准故称右连接,右侧表中所有信息将被全部输出,而左侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL

 

 

事件调度器

  • 简介
    • 自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合,也可以实现定时清空数据库,或截断数据库。

      事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。

  • 事件调度器基本操作
    • 查看事件调度器状态
      • 方式一,show variables like ‘event_scheduler’;
      • 方式二,select @@event_scheduler;
      • 方式三,show processlist;
    • 开启事件调度器
      • set global event_scheduler = 1;   或者 set global event_scheduler = on;
    • 关闭事件调度器
      • set global event_scheduler = 0;或者 set global event_scheduler = off;
    • 也可以使用配置文件,直接配置默认开启,或默认关闭
      • 在MySQL的配置文件my.ini(Windows系统)/my.cnf(Linux系统)中,找对[mysqld],然后在下面添加以下代码开启事件。添加,event_scheduler = 1;   或默认关闭*** = 0;
  • 事件的基本操作
    • 创建事件
      • CREATE EVENT [IF NOT EXISTS] event_name
            ON SCHEDULE schedule
            [ON COMPLETION [NOT] PRESERVE]
            [ENABLE | DISABLE]
            [COMMENT 'comment']
            DO sql_statement;
        
        参数说明
        DEFINER    可选,用于定义事件执行时检查权限的用户
        IF NOT EXISTS    可选项,用于判断要创建的事件是否存在
        EVENT event_name    必选,用于指定事件名,event_name的最大长度为64个字符,如果为指定event_name,则默认为当前的MySQL用户名(不区分大小写)
        ON SCHEDULE schedule    必选,用于定义执行的时间和时间间隔
        ON COMPLETION [NOT] PRESERVE    
        可选,用于定义事件是否循环执行,即是一次执行还是永久执行,默认为一次执行,即 NOT PRESERVE
        
        ENABLE | DISABLE | DISABLE ON SLAVE    可选项,用于指定事件的一种属性。其中,关键字ENABLE表示该事件是活动的,也就是调度器检查事件是否必选调用;关键字DISABLE表示该事件是关闭的,也就是事件的声明存储到目录中,但是调度器不会检查它是否应该调用;关键字DISABLE ON SLAVE表示事件在从机中是关闭的。如果不指定这三个选择中的任意一个,则在一个事件创建之后,它立即变为活动的。
        COMMENT 'comment'    可选,用于定义事件的注释
        DO event_body    
        必选,用于指定事件启动时所要执行的代码。可以是任何有效的SQL语句、存储过程或者一个计划执行的事件。如果包含多条语句,可以使用BEGIN...END复合结构
        create基本语法
        schedule:
            AT TIMESTAMP [+ INTERVAL INTERVAL]
          | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
        
        
        1timestamp:表示一个具体的时间点,后面加上一个时间间隔,表示在这个时间间隔后事件发生。
        
        (2)EVERY子句:用于表示事件在指定时间区间内每隔多长时间发生一次,其中 SELECT子句用于指定开始时间;ENDS子句用于指定结束时间。
        
        (3)interval:表示一个从现在开始的时间,其值由一个数值和单位构成。例如,使用“4 WEEK”表示4周;使用“‘1:10’ HOUR_MINUTE”表示1小时10分钟。间隔的距离用DATE_ADD()函数来支配。
        子语句,schedule基本语法
        INTERVAL:
            quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
                      WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
                      DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
        子语句,interval基本语法
      • 示例
        • 1) 首先来看一个简单的例子来演示每秒插入一条记录到数据表
          
          USE test;
          CREATE TABLE aaa (timeline TIMESTAMP);
          CREATE EVENT e_test_insert
              ON SCHEDULE EVERY 1 SECOND 
              DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);
          
          2) 5天后清空test表:
          
          CREATE EVENT e_test
              ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
              DO TRUNCATE TABLE test.aaa;
          
          
          3) 2007年7月20日12点整清空test表:
          
          CREATE EVENT e_test
              ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
              DO TRUNCATE TABLE test.aaa;
          
          
          4) 每天定时清空test表:
          
          CREATE EVENT e_test
              ON SCHEDULE EVERY 1 DAY
              DO TRUNCATE TABLE test.aaa;
          
          
          
          5) 5天后开启每天定时清空test表:
          
          CREATE EVENT e_test
              ON SCHEDULE EVERY 1 DAY
              STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
              DO TRUNCATE TABLE test.aaa;
          
          
          6) 每天定时清空test表,5天后停止执行:
          
          CREATE EVENT e_test
              ON SCHEDULE EVERY 1 DAY
              ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
              DO TRUNCATE TABLE test.aaa;
          
          
          7) 5天后开启每天定时清空test表,一个月后停止执行:
          
          CREATE EVENT e_test
              ON SCHEDULE EVERY 1 DAY
              STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
              ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
              DO TRUNCATE TABLE test.aaa;
          [ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
          
          
          8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):
          
          CREATE EVENT e_test
              ON SCHEDULE EVERY 1 DAY
              ON COMPLETION NOT PRESERVE
              DO TRUNCATE TABLE test.aaa;
          [ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
          [COMMENT 'comment']可以给该事件加上注释。
          sql

           

    • `修改事件
      • ALTER EVENT event_name
            [ON SCHEDULE schedule]
            [RENAME TO new_event_name]
            [ON COMPLETION [NOT] PRESERVE]
            [COMMENT 'comment']
            [ENABLE | DISABLE]
            [DO sql_statement]
        Alter基本语法
      • 示例
        • 1) 临时关闭事件
          
          ALTER EVENT e_test DISABLE;
          
          
          2) 开启事件
          
          ALTER EVENT e_test ENABLE;
          
          
          3) 将每天清空test表改为5天清空一次:
          
          ALTER EVENT e_test
              ON SCHEDULE EVERY 5 DAY;
          sql
    • 删除事件
      • Drop基本语法
        • DROP EVENT [IF EXISTS] event_name
      • 示例
        • DROP EVENT e_test;
          
          
          
          
          当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS
          
          DROP EVENT IF EXISTS e_test;
          sql

           

posted @ 2019-05-23 20:57  林山风火  阅读(3)  评论(0)    收藏  举报