• MySQL基本知识


    1.存储引擎选择

      InnoDB:支持事务,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。 

      MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。

      MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

    2.触发器

    触发器语法

    create trigger trigger_name trigger_time trigger_event
    on tbl_name for each row trigger_stmt

    trigger_name:标识触发器名称,用户自行指定;

    trigger_time:标识触发器时机,取值BEFOR或AFTER;

    trigger_event:标识触发器事件,取值为INSERT,UPDATE或DELETE;

    tbl_name:标识建立触发器的表名,即在哪一张表上建立触发器;

    trigger_stmt:触发器程序体,可以是一句SQL语句,或者用BEGIN和END包含的多条语句

    注:不能在一个表上建立两个相同类型的触发器

    tigger_event

    注:load data和replace语句可以引起触发器,load data相当于一系列的insert操作,ireplace则相当于删除后插入数据

    语法

    begin
        [statement_list]
    end;

    statement_list:相当于一个或者多个语句的列表,列表内的每条语句需以;来结尾

    需要使用delimiter命令(定界符,分隔符),是一条命令,不需要语句结束标识,语法为:

    DELIMITER new_delemiter

    new_delemiter可以设为1个或多个长度的符号,默认为分号(;)可修改为管道符,如:delimiter |

    在此之后的语句,以分号结束,解释器不会有什么反应,只有遇到管道符才认为是语句结束。使用完成后还需将其修改回来

    eg.

    DELIMITER |
    create trigger tri_stuInsert after insert
    on student for each row
    begin
      declare c int;
      set c = (select stuCount from class where classID=new.classID);
      update class set stuCount = c + 1 where classID = new.classID;
    end|
    DELIMITER ;

    触发器变量:

    ①变量

    可以使用DECLARE定义一个局部变量,该变量只能在begin……end符合语句中使用,并且应该定义在符合语句的开头

    语法:

    DECLARE  var_name[,...] type [DEFAULT value]

    其中:

    var_name为变量名称,与SQL相同,变量名称不区分大小写;

    type 为MYSQL支持的任何数据类型;

    可同时定义多个同类型的变量,用逗号隔开

    变量初始值未NULL,就可以使用DEFAULE子句提供默认值,值可以被指定为一个表达式

    对变量赋值采用SET语句,语法为

    SET var_name = expr [,var_name = expr] ...

    ②NEW与OLD

    触发器的所在表中,触发了触发器的那一行数据。

    在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;

    在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;

    在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据;

    使用方法: NEW.columnName (columnName 为相应数据表某一列名)

    另外,OLD 是只读的,而 NEW 则可以在触发器中使用 SET 赋值,这样不会再次触发触发器,造成循环调用

    ③查看触发器

    show triggers [From schema_name];

    schema_name即Schema的名称,在MYSQL中与database是一样的,也就是说,可以指定数据库名

    ④删除触发器

    drop  trigger [if exises] [schema_name.]trigger_name

    ⑤触发器的执行顺序

    数据库一般建立为Innob数据库,其上建立的表是事务性的,也就是事务安全的可以进行回滚事务

    注:MySQL回滚事务有,如果before触发器执行失败,SQL无法正确执行;SQL执行失败时,after型触发器不会触发;after类型的触发器执行失败,SQL会回滚;

  • 相关阅读:
    P3373 线段树模板
    由AC自动机引发的灵感
    瞎子摸象序
    Outer Join的where条件
    将 转移单 自动发货
    获取某个结点的所有层
    瞎子摸象库存篇
    js修改select列表选项中的值
    JS仿flash动态切换(横向,带分页器控制,自动正反向循环轮播)
    js操作select下拉列表的一些通用代码
  • 原文地址:https://www.cnblogs.com/taoyucheng/p/10714617.html
Copyright © 2020-2023  润新知