MySQL基础知识和常用操作命令汇总(二)

目录

一. 索引

1. 概述

1.1 MySQL索引概述

1.2 MySQL索引分类

2. 创建索引

2.1 在建立数据表时创建索引

2.2 在已建立的鼠标中创建索引

2.3 修改数据表结构添加索引

3. 删除索引

二. 视图

1. 视图概述

1.1 概念

1.2 作用

2. 创建视图

2.1 查看创建视图的权限

2.2 创建视图的步骤

2.3 创建视图的注意事项

3. 视图操作

3.1 查看视图

3.2 修改视图

3.3 更新视图

3.4 删除视图

三. 数据完整性约束

1. 定义完整性约束

1.1 实体完整性

1.2 参照完整性

1.3 用户定义完整性

2. 命名完整性约束

2.1 命名完整性约束的方式

2.2 语法

3. 更新完整性约束

3.1 删除完整性约束

3.2 修改完整性约束

四. 存储过程和存储函数

1. 创建存储过程和存储函数

1.1 创建存储过程

1.2 创建存储函数

1.3 变量的应用

2. 存储过程和存储函数的调用

2.1 调用存储过程

2.2 调用存储函数

3. 查看存储过程和存储函数

4. 修改存储过程和存储函数

5. 删除存储过程和存储函数

五. 触发器

1. MySQL触发器

1.1 创建MySQl触发器

1.2 创建具有多条执行语句的触发器

2. 查看触发器

2.1 show triggers

2.2 查看triggers表中触发器信息

3. 使用触发器

4. 删除触发器

六. 事务的应用

七. 事件

八. 备份与恢复


一. 索引

1. 概述

1.1 MySQL索引概述

(1)索引是一种将数据库中的单列或者多列的值进行排序的结构。引用索引,可以大幅度提高查询的速度。

(2)索引可以提高查询速度,降低服务器的负载,但也不是绝对的。

(3)索引会影响用户操作数据库的插入操作,因为向有索引的数据库中插入数据,数据库系统按照索引进行排序,用户可以将索引删除后,插入数据,再重新创建索引。

(4)所有存储引擎对每个表至少支持16个索引。总索引长度至少为256个字节。

(5)索引有两种存储类型,包括B树索引和哈希索引。

1.2 MySQL索引分类

(1)普通索引

(2)唯一性索引

(3)全文索引

(4)单列索引

(5)多列索引

(6)空间索引

2. 创建索引

2.1 在建立数据表时创建索引

(1)普通索引创建

        语法:

        > create table 表名 (

        > 字段名1 属性,

        > 字段名2 属性,

        ...

        > index(字段名1));

(2)创建唯一性索引

可以一定程度上约束字段的唯一性。

 语法:

        > create table 表名 (

        > 字段名1 属性,

        > 字段名2 属性,

        ...

        > unique index 索引名(字段名1 ASC));

(3)创建全文索引

全文索引的创建只能作用在CHAR, CARCHAR, TEXT类型的字段。

语法:

        > create table 表名 (

        > 字段名1 属性,

        > 字段名2 属性,

        ...

        > fulltext key 索引名(字段名1)

          > )engine=MyISAM;

备注: 只有MyISAM类型的数据表支持fulltext全文索引。

(4)创建单列索引

即在数据表的单个字段上创建索引。不需要引入约束参数,用户在建立时只需要指定单列字段名,即可创建单列索引。

语法:

        > create table 表名 (

        > 字段名1 属性,

        > 字段名2 属性,

        ...

        > index 索引名(字段名1(属性));

(5)创建多列索引

在多列索引中,只有查询条件中使用了这些字段中的第一个字段(下面的字段名1)时,索引才会被使用。

触发多列索引的条件是用户必须使用索引的第一字段,否则索引不起作用。

用户想要优化查询速度,可以应用该类索引形式。

语法:

        > create table 表名 (

        > 字段名1 属性,

        > 字段名2 属性,

        ...

        > index 索引名(字段名1,字段名2...));

(6)创建空间索引

需要设置SPATIAL参数。同样,只有MyISAM类型表支持空间索引。

而且索引字段必须要有非空约束,索引字段数据类型是空间数据类型,否则在生成空间索引时会产生错误。

语法:

        > create table 表名 (

        > 字段名1 属性,

        > 字段名2 属性,

        ...

        >spatial index 索引名(字段名1)

        > )engine=MyISAM;

2.2 在已建立的鼠标中创建索引

(1)创建普通索引

        语法:

        > create index 索引名 on 表名(字段名);

(2)创建唯一性索引

可以一定程度上约束字段的唯一性。

 语法:

        > create unique index 索引名 on 表名(字段名);

(3)创建全文索引

全文索引的创建只能作用在CHAR, CARCHAR, TEXT类型的字段。

语法:

        > create fulltext index 索引名 on 表名(字段名);

备注: 只有MyISAM类型的数据表支持fulltext全文索引。

(4)创建单列索引

即在数据表的单个字段上创建索引。不需要引入约束参数,用户在建立时只需要指定单列字段名,即可创建单列索引。

语法:

        > create index 索引名 on 表名(字段名(属性));

(5)创建多列索引

在多列索引中,只有查询条件中使用了这些字段中的第一个字段(下面的字段名1)时,索引才会被使用。

触发多列索引的条件是用户必须使用索引的第一字段,否则索引不起作用。

用户想要优化查询速度,可以应用该类索引形式。

语法:

        > create index 索引名 on 表名(字段名1,字段名2...);

(6)创建空间索引

需要设置SPATIAL参数。同样,只有MyISAM类型表支持空间索引。

而且索引字段必须要有非空约束,索引字段数据类型是空间数据类型,否则在生成空间索引时会产生错误。

语法:

        > create spatial index 索引名 on 表名(字段名);

2.3 修改数据表结构添加索引

(1)添加普通索引

        语法:

        > alter table 表名 add index 索引名(字段名(属性));

(2)添加唯一索引

可以一定程度上约束字段的唯一性。

 语法:

        > alter table 表名 add unique index 索引名*(字段名(属性));

(3)创建全文索引

全文索引的创建只能作用在CHAR, CARCHAR, TEXT类型的字段。

语法:

        > alter table 表名 add fulltext index 索引名(字段名(属性));

备注: 只有MyISAM类型的数据表支持fulltext全文索引。

(4)创建单列索引

即在数据表的单个字段上创建索引。不需要引入约束参数,用户在建立时只需要指定单列字段名,即可创建单列索引。

语法:

        > alter table 表名 add index 索引名(字段名(属性));

(5)创建多列索引

在多列索引中,只有查询条件中使用了这些字段中的第一个字段(下面的字段名1)时,索引才会被使用。

触发多列索引的条件是用户必须使用索引的第一字段,否则索引不起作用。

用户想要优化查询速度,可以应用该类索引形式。

语法:

        >alter table 表名 add index 索引名(字段名1,字段名2...);

(6)创建空间索引

需要设置SPATIAL参数。同样,只有MyISAM类型表支持空间索引。

而且索引字段必须要有非空约束,索引字段数据类型是空间数据类型,否则在生成空间索引时会产生错误。

语法:

        > alter table 表名 add spatial index 索引名(字段名1);

3. 删除索引

3.1 手动删除索引

语法:

        > drop index 索引名 on 表名;

二. 视图

1. 视图概述

1.1 概念

(1)视图是一个虚拟表,是从数据库中一个或多个表中导出来的表,其内容由查询定义。

视图包含一系列带有名称的列和行数据。

数据库只存放视图的定义,并没有存放视图中的数据,数据还在原来的表中。

使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。即:视图数据依赖原来表中的数据,一旦表中的数据发生改变,则视图中的数据也会发生改变。

(2)视图是存储在数据库中的查询的SQL语句。

视图的存在,基于两种原因:

1)安全原因。视图可以隐藏一些数据。

2)可使复杂的查询易于理解和使用。

1.2 作用

视图的作用类似于筛选。

定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。

通过视图进行查询没有任何限制,通过视图修改数据的限制也很少。

(1)简单性:那些被经常使用的查询可以被定义为视图。

(2)安全性:可以防止未授权用户查看特定的行或列。

使有权限用户只能看到表中特定行的方法:

1)在表中增加一个标志用户名的列

2)建立视图,使用户只能看到标有自己用户名的行

3)把视图授权给其他用户

(3)逻辑数据独立性:可以使应用程序和数据库表在一定程度上独立。有了视图之后,程序可以建立在视图上,不用直接建立在数据库表上。

在以下几点是程序和数据独立:

1)如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而使应用程序可以不动。

2)如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表可以不动。

3)如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而使应用程序可以不动。

4)如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而使数据库表可以不动。

2. 创建视图

创建视图,是指在已经存在的数据库表中建立视图。可以建立在一张或多张表中。

2.1 查看创建视图的权限

创建视图,需要具有create view 的权限,以及具有查询涉及的列的select权限。

查看权限的语法:select Select_priv, Create_view_priv from mysql.user where user='用户名';

参数:

Select_priv:表示用户是否具有select权限,Y表示有,N表示没有。

Create_view_priv:表示用户是否具有create view的权限。

用户名:表示要查询是否拥有drop权限的用户,要用单引号。表示该用户是否具有上面两个权限。

2.2 创建视图的步骤

(1)通过create view语句创建视图

(2)语法:

create view 视图名(属性清单) as select 语句;

create viwe 视图名(字段1,字段2...) as select 字段1,字段2,字段3... from 表名1,表名2 where 表名1.字段1=表名2.字段1;

2.3 创建视图的注意事项

(1)运行创建视图的语句需要用户具有创建视图的权限。若加了or replace,还需要用户具有删除视图drop view的权限。

(2)select语句不能包含from子句中的子查询。

(3)select语句不能引用系统或用户变量。

(4)select语句不能引用预处理语句参数。

(5)在存储子程序内,定义不能引用子程序参数或局部变量。

(6)在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。

(7)在定义中不能引用temporary表,不能创建temporary视图。

(8)在视图定义中命名的表必须存在。

(9)不能将触发程序与视图关联在一起。

(10)在视图定义中允许使用order by, 但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略。

3. 视图操作

3.1 查看视图

查看视图,要有show view 权限。

(1)describe语句

describe 视图名;

desc 视图名;

(2)show table status语句

show table status like '视图名';

(3)show create view语句

show create view 视图名;

3.2 修改视图

修改视图,是指修改数据库中已存在的表的定义。

当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表的一致。

(1)create or replace view

create or replace view 视图名(属性清单) as select 语句;

该语句可以在视图存在时对视图进行修改,在视图不存在时创建视图。

(2)alter

alter view语句改变了视图的定义,包括被索引视图,但不影响所依赖的存储过程或触发器。

alter view 视图名 as select 语句 [with check option];

3.3 更新视图

对视图的更新就是对表的更新。

更新视图是指通过视图来插入,更新和删除表中的数据。

(1)更新视图

update 视图名 set 字段名1=值1,字段名2=值2 where 字段3=xxx;

(2)更新视图的权限

并不是所有的属兔都能更新。以下情况不能视图:

1)视图中包含count(), sum(), max(), min()等函数

2)视图中包含 union, union all, distinct, group by 和 having 等关键字

3)常量视图

4)视图中的select中包含子查询

5)由不可更新的视图导出的视图

6)创建视图是,algorithm为temptable类型

7)视图对应的表上存在没有没有默认值的列,而且该列没有包含在视图里。

建议:最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。

3.4 删除视图

删除视图,是指删除数据库中已存在的视图。只会删除视图的定义,不会删除数据。

(1)drop view语句

drop view if exists 视图名;

三. 数据完整性约束

数据完整性:是指数据的正确性和相容性,是为了防止数据库中存在不符合语义的数据,即防止数据库中存在不正确的数据。

一旦定义了完整性约束,MySQL服务器会随时检测处于更新状态的数据库内容是否符合相关的完整性约束,从而保证数据的一致性与正确性。

这样,既能有效地防止对数据库的意外破坏,又能提高完整性检测的效率,还能减轻数据库编程人员的工作负担。

1. 定义完整性约束

1.1 实体完整性

(1)实体:一个数据对象,是指客观存在并可以相互区分的事物。一个实体就是数据表中的一条记录。

(2)实体完整性规则:是指关系的主属关系,即主键的组成不能为空null。

关系对应于现实世界中的实体集,而现实世界中的实体是可区分的,即说明每个实例具有唯一性标识。在关系模型中,是使用主键作为唯一性标识的,因此主键不能为空。

(3)实体完整性是通过主键约束和候选键约束来实现。

(4)主键约束:

1)主键可以是表中的某一列,也可以是表中的多个列所构成的一个组合,后者称为复合主键。

2)主键列必须遵守以下规则:

--- 每个表只能定义一个主键。

--- 唯一性原则。键值要能够唯一标识表中的每一行记录,且不能为null。

--- 最小化规则。复合主键不包含不必要的多余列。

--- 一个列名在符合主键的列表中只能出现一次。

3)在create table和alter table的语句中,使用 primary key子句来创建主键约束。定义主键约束后,MySQL会自动为主键创建一个唯一索引,默认名为primary,可改名。

两种实现方式:

--- 作为的完整性约束

--- 作为的完整性约束 (如果是复合主键,则只能用这一种方式)

语法1:

create table 表名(

列名1 属性 primary key,

列名2 属性,

......

);

语法2:

create table 表名(

列名1 属性,

列名2 属性,

......

primary key (列名1,列名2)

);

(5)候选键约束

1)如果一个属性集能唯一标识元组,且又不含有多余的属性,那么这个属性集称为关系的候选键。

2)候选键可以是表中的一列,也可以是多列的组合。任何时候,候选键的值必须是唯一的,且不能为空。

3)在create table和alter table的语句中,使用 unique 来定义候选键。两种实现方式:

--- 作为的完整性约束

--- 作为的完整性约束 (如果是复合主键,则只能用这一种方式)

语法1:

create table 表名(

列名1 属性 unique,

列名2 属性 unique

......

);

语法2:

create table 表名(

列名1 属性,

列名2 属性,

......

unique (列名1,列名2)

);

(6)候选键和主键之间的区别:

1)一个表中只能创建一个主键,但可以定义若干个候选键。

2)定义主键约束时,系统会自动创建primary key索引。而定义候选键约束时,系统会自动创建unique索引。

1.2 参照完整性

(1)参照完整性规则:就是定义外键和主键之间的引用规则,它是对关系引用数据的一种限制。

(2)参照完整性的定义:若属性或属性组F是基本关系R的外键,它与基本关系S的主键K相对应,则对于R中每个元组在F上的值只允许两种可能:要么空值(F的每个属性值都为空值),要么等于S中某个元组的主键值。其中,关系R和S可以是不同的关系,也可以是同一关系。F和K定义在同一域中。这就是参照完整性。

(3)参照完整性也是系统自动支持的,即在建立关系(表)时,只要定义了“谁是主键”“谁参照于认证”,系统将自动进行此类完整性的检查。

(4)在create table和alter table的语句中,定义一个外键声明来实现。

(5)MySQL有两种常用的引擎类型(MyISAM, InnoDB),只有InnoDB引擎类型支持外键。要设置为主外键关系的两张数据表必须具有相同的存储引擎。

(6)语法:

create table 表名(

列名1 属性,

列名2 属性,

......

primary key (列名1,列名2),

foreign key (用于指定被设置为外键的列)

references 用于指定外键所参照的表名(用于指定被参照的列名)

on delete restrict

on update restrict

);

(7) 设置外键时需要遵循的规则

1.3 用户定义完整性

(1)用户自定义完整性规则:针对某一应用环境的完整性约束条件,它反映了某一具体应用所涉及的数据应满足的要求。关系模型提供定义和检验这类完整性规则的机制,其目的是有系统来同一处理,而不再是由应用程序来完成这项工作。

(2)MySQL支持非空约束,CHECK约束和触发器3种自定义完整性约束。

(3)非空约束:

1)非空约束可以在create table和alter table的语句中,通过在某个列定义后面加上关键字 not null 来定义,用来约束该列的取值不能为空。

2)语法:

create table 表名(

列名1 属性 not null,

列名2 属性 not null

......

);

(4)CHECK约束:

1)CHECK约束,也可以在create table和alter table的语句中,根据用户和实际完整性要求来定义。可以分为对列或表实施CHECK约束。

2)CHECK(expr):expr是一个SQL表达式,用于指定需要检查的限定条件。在更新数据表时,MySQL会检查更新后的数据行是否满足CHECK约束中的限定条件。

3)对列实施CHECK约束:

--- 将CHECK子句置于表的某个列的定义之后,就是对列实施CHECK约束。

--- 语法:

create table 表名(

列名1 属性 not null,

列名2 属性,

列名3 CHECK(列名2>10 and 列名2<20),

......

primary key(列名1)

);

4)对表实施CHECK约束:

--- 将CHECK子句置于表中所有列的定义以及主键约束和外键定义之后,就是对表实施CHECK约束。

--- 语法:

create table 表名(

列名1 属性 not null,

列名2 属性,

列名3 属性,

......

primary key(列名1),

CHECK(列名2 IN (select 列名5 from 表名2))

);

2. 命名完整性约束

2.1 命名完整性约束的方式

给各种约束命名,可用于删除和修改完整性约束。

即,在各种完整性约束的定义说明之前加上 constraint 子句来实现的。

2.2 语法

constraint 约束名称 primary key(列名)

或者 constraint 约束名称 foreign key(...)....

或者 constaint 约束名称 CHECK ......

注意:

(1)在MySQL中,主键约束名称只能是primary

比如:

alter table 表名 add constraint primary

primary key(列表名)

(2)只能给基于表的完整性约束指定名字,无法给基于列的完整性约束指定名字  

3. 更新完整性约束

对各种命名约束后,就可以使用alter table语句来更新或删除与列或表有关的各种约束。

3.1 删除完整性约束

(1)使用alter table语句,可以独立的删除完整性约束,而不会删除表本身

(2)使用drop table语句,删除一个表,表中的所有完整性约束也自动被删除

(3)语法:alter table 表名 drop foreign key 外键约束名;

3.2 修改完整性约束

(1)完整性约束不能被直接修改,若要修改,只能使用alter table语句先删除该约束,然后再增加一个与该约束同名的新约束。

(2)语法:

alter table 表名 drop foreign key 外键约束名;

alter table 表名 add constraint 约束名

foreign key (用于指定被设置为外键的列)

references 用于指定外键所参照的表名(用于指定被参照的列名)

on delete restrict

on update restrict

);

四. 存储过程和存储函数

存储过程和存储函数经常是一组SQL语句的组合,这些语句被当做整体存入MySQL数据库服务器中。用户定义的存储函数不能用于修改全局库状态,但该函数可从查询中被唤醒调用,也可以像存储过程一样通过语句执行。

1. 创建存储过程和存储函数

1.1 创建存储过程

(1)基本形式: create precedure 存储过程名(参数列表) 存储过程的特性 SQL代码

说明:

1)参数列表有三部分:输入输出类型(in, out, inout),参数名称,参数类型

2)SQL语句可以用 begin...end 来标识

3)存储过程文档特性:可选

(2)示例

delimiter //

create procedure proc_name(in parameter integer)

begin

declare variable(20);

if(parameter=1) then 

set variable='MySQL';

else

set variable='PHP';

end if;

insert into tb(name) values(variable);

end

//

(3)因为存储过程内部语句要以分号结束,所以在定义存储过程之前,应先将语句结束标志 ; 更改为其他字符,并且应该降低该字符在存储过程中出现的几率。比如用//作为结束符。更改结束符的语句: delimiter //

(4)定义好存储过程后,之后就可以调用这个存储过程,数据库中会执行存储过程中的SQL语句。

1.2 创建存储函数

(1)基本形式: create function 函数名(参数列表) returns type 存储过程的特性 SQL代码

说明:

1)参数列表:可以有多个参数,每个参数由参数名称+参数类型组成

2)type:返回值类型,可以是MySQL数据库所支持的类型

3)SQL语句可以用 begin...end 来标识

4)存储过程文档特性:可选

(2)示例

delimiter //

create function func_name(parameter integer)

returns varchar(50)

begin

return(select name from 表名 where 属性id=xxx);

end

//

(3)因为存储过程内部语句要以分号结束,所以在定义存储过程之前,应先将语句结束标志 ; 更改为其他字符,并且应该降低该字符在存储过程中出现的几率。比如用//作为结束符。更改结束符的语句: delimiter //

(4)定义好存储过程后,之后就可以调用这个存储过程,数据库中会执行存储过程中的SQL语句。

1.3 变量的应用

(1)局部变量(局部参数)

基本形式:declare 变量名 变量类型 [default 默认值]

说明:在内部begin...end块中定义的变量只在该块内有效。

调用存储过程的形式:call 存储过程名 //

delimiter //

create procedure p1()

begin

declare x char(10) default "outer";

begin

decalre x char(10) default "inner";

select x;

end;

select x;

end;

//

(2)全局变量(会话参数)

说明:MySQL中的会话变量,不必声明即可使用。会话变量在整个过程中有效,会话变量以字符@作为起始字符

基本形式: set @变量名   //直接使用

delimiter //

create procedure p2()

begin

set @t=1;

begin @t=2;

select @t;

end;

select @t;

end;

//

(3)为变量赋值

定义变量:declare 变量名 变量类型 [default 默认值]

为变量赋值:set 变量名1=值1, 变量名2=值2...

另一种赋值方式:

select 字段名1 into 变量名 from 表名 where 字段名2=xxx;

1.4 光标的运用

(1)作用:在存储过程和函数中使用光标可以实现逐条读取结果集中的记录。光标必须声明在处理程序之前。

(2)声明光标: 

语法:declare 光标名 cursor for select语句

注意:可以在存储过程声明多个光标,但每个光标的名字必须唯一。这里的select子句中不能包含into子句,并且光标只能在存储过程或存储函数中使用。下方代码不能单独执行:

declare info_of_student cursor for select

sid,, name, sex, age

from studentinfo

where sid=1;

(3)打开光标:

说明:在声明光标后,要从光标中提取数据,必须首先打开光标。在程序中,一个光标可以打开多次。由于可能在用户打开光标后,其他用户或程序正在更新数据表,所以可能会导致用户在每次打开光标后,显示的结果都不同。

语法: open 光标名

(4)使用光标:

语法: fetch 光标名 into 参数变量名[可有多个]

说明:参数变量名表示将光标中的select语句查询出的信息存入该参数。参数变量名必须在光标前定义好。fetch into和select into具有相同意义。

(5)关闭光标:

语法: close 光标名

说明:光标在使用完之后一定要关闭。

2. 存储过程和存储函数的调用

存储过程和存储函数,都是存储在服务器的SQL语句的集合。要使用这些定义好的存储过程和存储函数,必须要通过调用的方式来实现。

2.1 调用存储过程

语法: call 存储过程名(参数列表)

2.2 调用存储函数

语法:select 函数名(参数列表)

3. 查看存储过程和存储函数

3.1 show status 语句

说明:查看存储过程和存储函数的状态。只能查看所操作的存储过程和存储函数数据库对象。如存储过程或函数的名称,类型,定义者,修改时间等。

语法:show procedure|function status like '模式'  //模式匹配存储过程或存储函数名称

3.2 show create 语句

说明:查看存储过程和存储函数的状态

语法:show create procedure|function 存储过程或存储函数的名称

4. 修改存储过程和存储函数

说明:通过alter procedure|function 修改已经定义好的存错过程或存储函数

语法: alter procedure|function 存储名 [存储函数的特性] 

5. 删除存储过程和存储函数

说明:在删除之前,必须确保该存储过程或存储函数没有任何依赖关系。

语法:drop procedure|function if exists 存储名

五. 触发器

1. MySQL触发器

触发器:

是由MySQL的基本命令事件来触发某种特定操作。这些基本的命令由INSERT, UPDATE, DELETE等事件来触发某些特定操作。满足触发器的触发条件时,数据库系统就会自动执行触发器中定义的程序语句,可以令某些操作之间的一致性得到协调。

1.1 创建MySQl触发器

(1)语法:

create trigger 触发器名 before|after 触发事件 on 表名 for each row 执行语句

参数说明:

触发器名:要创建的触发器的名称

before|after:指定触发器执行的时间

触发事件:指数据库操作触发条件,其中包括INSERT, UPDATE, DELETE。

表名:触发事件操作表的名称

for each row:表示任何一条记录上的操作满足触发事件都会触发该触发器

执行语句:指触发器被触发后执行的程序。

(2)示例:

create table timelog(

id int(11) primary key auto_increment not null,

savetime varchar(50) not null

);

delimiter //

create trigger auto_save_time before insert on studentinfo for each row insert into timelog(savetime) values(now());

//

1.2 创建具有多条执行语句的触发器

(1)语法:

create trigger 触发器名 before|after 触发事件 on 表名 for each row 

begin

执行语句列表

end

其中,参数说明:

执行语句列表:将要执行的多条语句放入begin与end之间。多条语句需要执行的内容,需要用分隔符分号 ";" 隔开。

(2)示例:

create table timelog(

id int(11) primary key auto_increment,

info varchar(50) not null

)//

delimiter //

create trigger delete_time_info after delete on studentinfo for each row

begin

insert into timelog(savetime) values(now());

insert into timeinfo(info) values('deleteact')

end

//

补充:在MySQL中,一个表在相同的时间和相同的触发事件只能创建一个触发器。

2. 查看触发器

2.1 show triggers

(1)语法: show triggers;

(2)说明:查看该数据库中已经存在的所有触发器的基本信息。存在弊端:只能查看所有触发器的内容,并不能指定查看某个触发器的信息。

2.2 查看triggers表中触发器信息

(1)语法:select * from information_schema.triggers;

(2)说明:在MySQL中,所有触发器的定义都存在该数据库的trigegrs表中。读者可以通过查询triggers表来查看数据库中的所有触发器的详细信息。

(3)information_schema是MySQL中默认存在的库,information_schema用于记录触发器信息的数据表。

(4)查看某个具体的触发器的内容:select * from information_schema.triggers where trigger_name = '要查看的触发器的名称';

3. 使用触发器

(1)触发器执行顺序: before触发器操作,表操作,after触发器操作

其中,表操作包括常用的数据库操作命令: 比如insert, update, delete等

(2)补充:触发器不能包含start transcation, commit或者rollback等关键字,也不能包含call语句。

4. 删除触发器

(1)语法: drop trigger 触发器名;

(2)说明:在应用完触发器后,一定要将其删除。

六. 事务的应用

1. MySQL事务概述

2. MySQL事务的创建与存在周期

3. MySQL事务行为

4. 事务的性能

5. MySQL伪事务

七. 事件

1. 事件概述

2. 创建事件

3. 修改事件

4. 删除事件

八. 备份与恢复

1. 数据备份

2. 数据恢复

3. 数据库迁移

4. 表的导出和导入

猜你喜欢

转载自blog.csdn.net/sulia1234567890/article/details/121121547