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会回滚;

原文地址:https://www.cnblogs.com/taoyucheng/p/10714617.html