MySQL高阶应用

一、索引

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

注:不同的存储引擎定义每个表的最大索引数和最大索引长度。所以存储引擎对每个表至少支持16个索引。总索引长度至少为256字节。有些存储引擎支持更多的索引数和更大的索引长度。索引有两种存储类型,包括B型树索引和哈希索引,其中B型树是默认索引方法。

1.1索引的分类

MySQL的索引包括普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引。

1.1.1普通索引

普通索引,即不应用任何限制条件的索引,该索引可以是任何数据类型中创建。

1.1.2唯一索引

使用UNIQUE 参数可以设置唯一索引。创建该索引时,索引的值必须唯一,通过唯一索引,可以快速定位某条记录,主键是一种特殊唯一索引。

1.1.3全文索引

使用FULLTEXT参数可以设置索引为全文索引。全文索引只能创建在CHAR、VARCHAR或者TEXT类型的字段上。

1.1.4单列索引

单列索引即只对应一个字段的索引,其可以包括上述三种索引方式。应用该索引的条件只需要保证该索引值对应一个字段即可。

1.1.5多列索引

多列索引是在表的多个字段上创建一个索引。该索引指向创建时对应的多个字段,用户可以通过这几个字段进行查询。要想应用该索引,用户必须使用这些字段中第一个字段。

1.1.6空间索引

使用SPATIAL参数可以设置索引为空间索引。空间索引只能建立在空间数据类型上,MySQL中只有MyISAM存储引擎支持空间检索,而且索引的字段不能为空。

1.2索引操作

1.2.1在建立数据表时直接创建索引

基本语法结构如下:

create table 表名(
属性名 数据类型[约束条件],
属性名 数据类型[约束条件],
.......
属性名 数据类型[约束条件]
[UNIQUE | FULLTEXT | SPATIAL]
INDEX KEY
[别名](属性1[长度] [ASC | DESC])
);

其中,属性名后的属性值,其含义如下:

  • UNIQUE:可选参数,表明索引为唯一索引
  • FULLTEXT:可选参数,表明索引为全文索引
  • SPATIAL:可选参数,表明索引为空间索引

INDEX 和KEY 参数用于指定字段索引,使用其中一种即可;别名为可选参数,用于给创建的索引取新名称。

别名的参数如下:

  • 属性名1:指索引对应的字段名称,该字段必须被预先定义。
  • 长度:可选参数,其指索引的长度,必须是字符串类型才可以使用
  • ASC|DESC:可选参数,ASC表示升序排列,DESC表示降序排列

1.2.2在已建立的数据表中创建索引

命令结构如下:

create [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
ON 表名(属性[length] [ASC | DESC]);

命令的参数说明:

  • 可选参数,指定索引类型,包括UNIQUE(唯一索引)、FULLTEXT(全文索引)、SPATIAL(空间索引)。
  • 属性参数,指定索引对应的字段名称。该字段必须已经存在要操作的数据表中
  • length为可选参数,用于指定索引长度
  • ASC和DESC参数,指定数据表的排列顺序。 
--创建普通索引
create INDEX 索引名 ON 表名(字段名);
--创建唯一索引
create UNIQUE INDEX 索引名 ON 表名(字段名);
--创建全文索引
create FULLTEXT INDEX 索引名 ON 表名(字段名);
--创建单列索引
create INDEX 索引名 ON 表名(字段名(长度));
--创建多列索引
create INDEX 索引名 ON 表名(指字段名1,字段名2,.....);
--创建空间索引
create SPATIAL INDEX 索引名 ON 表名(字段名);

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

基本结构如下:

ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名(属性名[length] [ASC | DESC ]);

命令的参数说明:

  • 可选参数,指定索引类型,包括UNIQUE(唯一索引)、FULLTEXT(全文索引)、SPATIAL(空间索引)。
  • 属性参数,指定索引对应的字段名称。该字段必须已经存在要操作的数据表中
  • length为可选参数,用于指定索引长度
  • ASC和DESC参数,指定数据表的排列顺序。 
--添加普通索引
alter table 表名 add index 索引名(字段名);
--添加唯一索引
alter table 表名 add unique index 索引名(字段名);
--添加全文索引
alter table 表名 add fulltext index 索引名(字段名);
--添加空间索引
alter table 表名 add spatial index 索引名(字段名);
--添加单列索引
alter table 表名 add index 索引名(字段名(长度));
--添加多列索引
alter table 表名 add  index 索引名(字段名1,字段名2,....);

1.2.4删除索引

结构如下: 

drop index 索引名 on 表名;

1.2.5查看表结构

结果由SQL显示,结构如下:

show create table 表名

二、视图

2.1视图的概念

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

视图是存储在数据库中的查询的SQL语句,它主要出于两种原因:一种是安全原因,视图可以隐藏一些数据;另一种原因是可以使复杂的查询易于理解。

视图的作用:简单性、安全性、逻辑数据独立性

2.2视图的操作

2.2.1查看创建视图的权限

结构如下:

select selete_priv,create_view_priv from mysql.user where user='用户名';
  • select_priv属性表示用户是否具有select权限,Y表示拥有select权限,N表
  • create_view_priv属性表示用户是否具有create view(创建视图)权限
  • '用户名'参数表示要查询是否拥有DROP权限的用户

2.2.2创建视图

结构如下:

create [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
view 视图名[(属性清单)]
as select语句
[with [cascaded|local] check option];
  • ALGORITHM是可选参数,表示视图选择的算法
  • ‘视图名’参数表示要创建的视图名称
  • ‘属性清单’是可选参数,指定视图中各个属性的名称,默认情况下与select一句中查询的属性相同
  • select语句参数是一个完整的查询语句,表示从某个表中查出某些满足条件的记录,将这些记录导入视图中
  • with check option是可选参数,表示更新视图时要保证在该试图的权限范围之内。

创建视图的注意事项:

  • 创建视图的用户需要具有创建视图的权限,若加入了[or replace]时,用户需要具有删除视图权限
  • select语句不能包含from子句中的子查询
  • select语句不能引用系统或用户变量
  • select语句不能引用预处理语句参数
  • 在存储子程序内,定义不能引用子程序参数或局部变量。
  • 在定义中引用的表或视图必须存在
  • 不能创建临时视图
  • 视图中定义命名的表必须存在
  • 不能将触发程序和视图关联
  • 在视图中允许使用排序,但是若视图具有自己的排序,自己写的排序将被忽略

2.2.3查看视图

结构如下:

DESCRIBE 视图名;
show table status like '视图名';
show create view 视图名;

2.2.4修改视图

create or replace [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
view 视图名[(属性清单)]
as select语句
[with [cascaded|local] check option];
或
alter view [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]view view_name [属性清单]
as select语句 [with [cascaded | local ] check option];

2.2.5更新视图

对视图的更新其实就是对表的更新,更新视图通过视图来进行插入、更新和删除表中的数据

更新视图的限制(不能更新):

  • 包含count()、sum()、max()、min()等函数
  • 视图中包含union、union all 、 distinct、group by、having等关键字
  • 常量视图
  • 视图中select包含子查询
  • 由不可更新的表创建的视图
  • 创建视图时,ALOGRITHM为TMEPTABLE类型
  • 视图对应的表上存在没有默认值的列,且该列没有包含在视图里。

2.2.6删除视图

结构如下:

drop view if exists <视图名> [restrict | cascade];

注:

如果该视图导出了其他视图,则使用CASCADE级联删除。

三、数据完整性约束

3.1定义完整性约束

数据完整性是指数据的正确性和相容性。

3.1.1实体完整性

实体是一个数据对象,是指客观存在并可以相互区分的事物。实体完整性规则是指关系的主属性,即主码(主键)的组成不能为空,也就是关系的主属性不能是空值。

3.1.1.(1)主键约束

主键可以是表中的某一列,也可以是表中多个列所构成的一个组合。其中,由多个列组合而成的主键也称复合主键。在MySQL中,主键列必须遵守以下规则。

  • 每一个表只能定义一个主键。
  • 唯一性原则。主键的值,也称键值,必须能够唯一标识表中的每一行记录,且不能为空。
  • 最小化规则。复合主键不能包含不必要的多于列。
  • 一个列名在复合主键的列表只能出现一次。
  • 作为列的完整性约束。在表的某个列的属性定义时,加上关键字PRIMARY KEY实现。

实例:

create table tb_user(
id int auto_increment PRIMARY KEY, ----主键
user varchar(30) not null,
password varchar(30) not null,
createtime datetime
);
  • 作为表的完整性约束。在表的所有列的属性定义后,加上PRIMARY KEY(index_col_name,...)实现。

实例:

create table tb_student(
id int auto_increment,
name varchar(30) not null,
sex varchar(2),
classid int not null,
birthday date,
primary key(id,classid)
);
3.1.1(2)候选键约束

候选键可以是表中的某一列,也可以是表中多个列所构成的一个组合,但是候选键的值必须是唯一的,且不能为空。

在MySQL中,候选键与主键之间存在以下两点区别:

  • 一个表只能创建一个主键,但可以定义若干个候选键
  • 定义主键约束时,系统会自动创建primary key索引,而定义候选键约束时,系统会自动创建UNIQUE索引。

实例:

create table tb_user1(
id int auto_increment UNIQUE,
user varchar(30) not null UNIQUE,
password varchar(30) not null,
createtime timestamp DEFAULT CURRENT_TIMESTAMP
);
3.1.1(3)参照完整性

参照完整性规则就是定义外码(外键)和主码(主键)之间的引用规则,它是对关系间引用数据的一种限制。MySQL有两种常见的引擎类型(MyISAM和InnoDB),目前只有InnoDB支持外键。InnoDB引擎类型中声明外键的基本语法格式如下:

[CONSTRANINT [SYMBOL]]
FOREIGN KEY (index_col_name,...) reference_definition

reference_definition的基本语法如下:

REFERENCES tbl_name[(index_col_name,...)]
               [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
               [ON DELETE reference_option]
               [ON UPDATE reference_option]
index_col_name的语法格式如下:
col_name [(length)] [ASC | DESC ]
reference_option的语法格式如下:
RESTRICT | CASCADE |SET NULL | NO ACTION

参数说明如下:

  • index_col_name:用于指定被设置为外键的列
  • tbl_name:用于指定外键所参照的表名。
  • col_name:用于指定被参照的列名。
  • ON DELETE |ON UPDATE:指定参照动作相关的SQL语句。可为每个外键指定对应于DELETE语句和UPDATE语句的参照动作。
  • reference_option:指定参照完整性约束的实现策略。
  • 策略可选值
    可选值说明
    RESTRICT限制策略:当要删除或更新的参数被参照表中被参照列上,并在外键中出现的值时,系统拒绝对被参照表的删除或更新操作
    CASCADE级联策略:从被参照表中删除或更新记录行时,自动删除或更新参照表匹配的记录行。
    SET NULL置空策略:当从被参照表中删除或更新记录行时,设置参照表中与之对应的外键列的值为NULL。
    NO ACTION不采取实施策略:当一个相关的外键值在被参照表中,删除或更新被参照表中值的动作不被允许。该策略的动作语言与RESTRICT相同。

    实例:

create table tb_student1(
id int auto_increment,
name varchar(30) not null,
sex varchar(2),
classid int not null,
birthday date,
remark varchar(100),
primary key (id),
foreign key (classid)--外键
references tb_class(id)--指向表的字段
on delete restrict--删除的规则
on update RESTRICt--更新的规则
);

设置外键时,通常需要遵守以下规则:

  • 被参照表必须是已经存在的,或者是当前正在创建的表。
  • 必须为被参照表定义主键。
  • 必须在被参照表名后面指定列名或列名的组合。这个列或者列的组合必须是这个被参照表的主键或候选键。
  • 外键中列的数目必须和被参照表中的列的数据相同。
  • 外键中列的数据类型必须和被参照表的主键(或候选键)中的对应的列的数据类型相同。
  • 尽管主键是不能包含空值的,但允许在外键中出现一个空值。

3.1.1(4)用户定义的完整性

MySQL支持非空约束、CHECK约束和触发器3中用户自定义完整性约束。先介绍非空约束和CHECK约束。

非空约束实例:

create table tb_class1(
id int(11) primary key auto_increment,
name varchar(45) not null,
remark varchar(100) default null
);

CHECK约束实例:

create table tb_student2(
id int primary key auto_increment,
name varchar(30) not null,
sec varchar(2),
age int not null check(age>6 and age<18),
remark varchar(100)
);

3.2完整性约束操作

3.2.1命名完整性操作

命名完整性约束的方式是在各种完整性约束的定义说明之前加上CONSTRAINT子句实现。语法格式如下:

CONSTRAINT<symbol>
    [PRIMARY KEY 短语 | FOREIGN KEY 短语 | CHECK 短语]

参数说明:

  • symbol:用于指定约束名称。
  • PRIMARY KEY短语:主键约束。
  • FOREIGN KEY短语:参照完整性约束。
  • CHECK 短语:CHECK约束。

实例:

create table tb_student1a(
id int primary key auto_increment,
name varchar(30) not null,
sex varchar(2),
classid int not null,
birthday date,
remark varchar(100),
CONSTRAINT fk_classid FOREIGN key (classid)
REFERENCES tb_class(id)
on delete RESTRICT
on update RESTRICT
);

3.2.2删除完整性约束

在MySQL中,使用ALTER TABLE 语句,可以独立地删除完整性约束,而不会删除表本身,具体的语法格式如下:

DROP [FOREIGN KEY | INDEX |<symbol>] | [PRIMARY KEY]

参数说明:

  • FOREIGN KEY:用于删除外键约束。
  • PRIMARY KEY:用于删除主键约束。注:在删除主键的时候必须要再创建一个主键,否则不能删除成功。
  • INDEX:用于删除候选键约束。
  • symbol:要删除的约束名称。 

实例:

alter table tb_student1a drop foreign key fk_classid;

3.2.3修改完整性约束(添加)

具体语法格式如下:

ADD CONSTRAINT <symbol> 各种约束

参数说明:

  • symbol:为要添加的约束指定一个名称。
  • 各种约束:定义各种约束的语句。

实例:

alter table tb_student1a 
add constraint fk_classid foreign key (classid)
references tb_class(id)
on delete cascade --级联(当删除依赖后,自身也会删除)
on update cascade;

四、存储过程和存储函数

4.1创建存储过程和存储函数

在数据库系统中,为了保证数据的完整性、一致性,同时也为提高其应用性能,大多数据库常采用存储过程和存储函数技术,存储过程和存储函数经常是一组SQL语句的组合,这些语句被当成整体存入MySQL数据库服务中。

4.1.1创建存储过程

在MySQL中,创建存储过程的基本形式如下:

create procedure sp_name ([proc_parameter[,....]])
[characteristic...] routine_body

参数说明:

sp_name:存储过程的名称

proc_parameter:存储过程的参数列表

characteristic:指定存储过程的特性

routine_body:是SQL代码的内容,一般用begin .... and 来标识SQL代码的开始和结束

说明:proc_parameter参数有3部分组成,它们分别是输入输出类型、参数名称和参数类型。其形式为[ IN | OUT | INOUT ]param_name type。其中IN表示输出参数;OUOT表示输出参数;INOUT表示既可以输入也可以输出;param_name参数是存储过程参数名称;type参数是指定存储过程的参数类型,该类型可以为MySQL数据库的任意数据类型。

实例:

delimiter // ---结束符号更改为 //
create procedure proc_name(in parameter integer)---输入参数
begin
declare variable varchar(20);
if parameter =1 then 
set variable ='MySQL';
else
set variable ='PHP';
end if ;
insert into tb(name) values(variable);
end;
//
create procedure count_of_student(out count_num int)--输出参数
reads sql data 
begin 
select count(*) into count_num from studentinfo;
end
//

4.1.2创建存储函数

创建存储函数的基本形式:

create function sp_name([func_paramter[,....]])
returns type
[characteristic] routine_body

参数说明:

sp_name:存储函数的名称

func_parameter:存储函数的参数列表

注:func_parameter可以由多个参数组成,其中每个参数均由参数名称和参数类型组成,其结构如下:

param_name type

returns type:指定返回值的类型

characteristic:指定存储过程的特性

routine_body:SQL代码的内容

实例:

delimiter //
set global log_bin_trust_function_creators =1 // --临时设置声明(如果长期使用在win中写在my.ini中;若是LINUX则写在my.cnf)
create function name_of_student(sid_id int)
returns varchar(50)
begin 
return (select name from studentinfo where sid = sid_id);
end
//

4.1.3变量的应用

4.1.3(1)局部变量

声明局部变量的基本语法形式:

declare var_name[...] type [default value]

实例:

在begin和end之间
delimiter //
create procedure p1()
begin 
declare x char(10) default 'outer';
begin 
declare x char(10) default 'inner';
select x;
end;
select x;
end;
//
4.1.3(2)全局变量
关键字@
整个存储范围内
create procedure p2()
begin 
set @t=1;
begin 
set @t=2;
select @t;
end;
select @t;
end;
//
4.1.3(3)为变量赋值

MySQL中可以使用DECLARE关键字来定义变量。定义变量的基本语法如下:

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

DECLARE是用来声明变量的;var_name参数是设置变量的名称,也可以同时设置多个变量;type参数用来指定变量的类型;DEFAULT value的作用是指定变量的默认值,不对该参数进行设置时,其默认值为NULL。

MySQL中可以使用SET关键字为变量赋值。SET语句的基本语法如下:

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

SET关键字用来为变量赋值;var_name参数是变量的名称;expr参数是赋值表达式。一个SET语句可以同时为多个变量赋值,各个变量的赋值语句之间用“,”隔开。

实例:

SET mr_sotf=10;

另外,MySQL中还可以应用另一种方式为变量赋值。其语法结构如下:

select col_name[,....] into var_name[,...] from table_name where condition

其中col_name参数标识查询的字段名称;var_name参数是变量的名称;table_name参数为指定数据表的名称;condition参数为指定查询条件。

4.1.3(4)光标的运用

作用:可以逐条读取结果集中的记录

---声明光标
declare cursor_name cursor for select_statement
--打开光标
open cursor_name
--使用光标
fetch cursor_name into var_name[,var_name]...
--关闭光标
close cursor_name

实例:

create procedure proc_cur()
begin 
--定义变量
declare user_id int;
declare user_name varchar(200);
declare done int;
--创建光标并存储数据
declare cur_test CURSOR for 
	select sid as user_id,name as user_name from studentinfo;
--光标中的内容执行完成后将done设置为1
declare continue handler for not found set done=1;
--打开光标
open cur_test;
--执行循环
posloop:loop
    --判断是否结束循环
	if done =1 then 
		leave posloop;
	end if;
	--取光标中的值
	fetch cur_test into user_id ,user_name;
	--执行更新操作
    update studentinfo set name= concat(user_id,"-",user_name) where sid =user_id;
end loop posloop;
--释放光标
close cur_test;
end
//

4.2调用存储过程和存储函数

其结构如下:

--调用存储过程
call sp_name([parameter[,...]])
--调用存储函数
select function_name([parameter[,...]])

4.3查看存储过程和存储函数

show {procdure | function } status [like 'pattern'];
或
show create {procdure | function } sp_name;

区别:

show status:

  • 只能查看存储过程或存储函数的名称、类型、定义者、修改时间等信息
  • 不能查询存储过程或存储函数的具体定义

show create:

  • 查看详细定义

实例:

show procedure status like 'count_of_student'//
show function status like 'name_of_student'//
show create procedure p1//
show create function name_of_student//

4.4修改存储过程和存储函数

语法形式如下:

alter {procedure | function } sp_name [characteristic ...]
characteristic:
{contains sql | no sql | reads sql data | modifies sql data}
| sql security {definer | invoker}
| comment 'string'
参数说明
参数说明
sp_name存储过程或存储函数的名称
characteristic指定存储函数的特性
contains sql表示子程序包含SQL语句,但不包含读写数据的语句
no sql表示子程序不包含SQL语句
reads sql data表示子程序中包含读数据的语句
modifies sql data表示子程序包含读写数据的语句
sql security{definer|invoker}指明权限执行。definer表示只有定义者可以执行;invoke表示调用者可以执行
comment 'string'是注释信息

实例:

alter procedure count_of_student
modifies sql data 
sql security invoker;
//

4.5删除存储过程和存储函数

语法如下:

drop {procedure | function} [if exists] sp_name;

实例:

drop procedure count_of_student//
drop function name_of_student//

五、触发器

触发器是由MySQL的基本命令时间来触发某种特定操作,这些基本的命令由INSERT、UPDATE、DELETE等事件来触发某些特定操作。

5.1创建触发器

5.1.1创建单个执行语句的触发器

语法结构如下:

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

参数说明:

  • 触发器名称用于指定要创建的触发器名字。
  • 参数before 和 after用于指定触发器执行的时间。before指在触发时间之前执行触发语句;atfer表示在触发时间之后执行触发语句。
  • 触发事件参数用于指定数据库作触发条件,其中包括INSERT、UPDATE、DELETE。
  •  表名用于指定触发时间操作表的名称。
  • for each row 表示任何一条记录上的操作满足触发事件都会触发该触发器。
  • 执行语句指触发器被触发后执行的程序。

实例:

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

5.1.2创建具有多个执行语句的触发器

语法结构如下:

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

实例:

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 
//

5.2查看触发器

语法结构如下:

show trigger;
或
select * from information_schema.triggers;
或
select * from information_schema.triggers where trigger_name= '';

5.3执行触发器

在MySQL中,触发器按以下顺序执行:before触发器、表操作、after触发器操作,其中表操作包含常用的数据库操作命令,如INSERT、UPDATE、DELETE。

5.4删除触发器

语法结构如下:

drop trigger 触发器名称;

六、事件

6.1查看事件

查看事件的结构语句:

show variables like 'event_scheduler';
或
show processlist;

说明:若参数event_scheduler的值为off则为关闭;若参数event_scheduler的值为on则为开启。 

6.2开启事件

开启事件一种是使用命令(在关闭MySQL后关闭),一种是修改my.ini配置文件。

set global event_scheduler=on;
或
在my.ini中添加如下配置:
event_scheduler=on

6.3创建事件

语句格式如下:

create
    [DEFAINER = { user | CURRENT_USER }]
    EVENT [IF NOT EXISTS] event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE ]
    [ENABLE | DISABLE |DISABLE ON SLAVE ]
    [COMMENT 'comment']
    DO event_body;
CREATE EVENT语句的子句
子句说明
DEFINER可选,用于定义事件执行时检查权限的用户
IF NOT EXISTS可选,用于判断要创建的事件是否存在
EVENT event_name必选,用于指定事件名
ON SCHEDULE schedule 必选,用于定义执行的时间和时间间隔
ON COMPLETION [NOT] PRESERVE可选,用于定义事件是否循环执行,即是一次执行还是永久执行,默认为一次执行即 NOT PRESERVE
ENABLE|DISABLE|DISABLE ON SLAVE可选,用于指定事件的一种属性。关键字ENABLE表示该事件活动的;关键字DISABLE表示该事件关闭的;关键字DISABLE ON SLAVE 表示事件是从机中关闭的
COMMENT 'comment'可选,用于定义事件的注释
DO event_body必选,用于指定事件启动时所要执行的代码。

 在ON SCHEDULE子句中,参数schedule的值为一个AS子句,用于指定事件在某个时刻发生,其语法格式如下:

AT timestamp [+ INTERVAL interval]...
| EVEERY interval
[STARTS timestamp [+ INTERVAL interval]....]
[ENDS timestamp [+] INTERVAL interval....]

参数说明:

  • timestamp:表示一个具体的时间点,后面加上一个时间间隔,表示在这个时间间隔后事件发生。
  • EVERY子句:用于表示事件在指定事件区域内每间隔多长事件发生一次,其中STARTS子句用于指定开始事件;ENDS子句用于指定结束事件
  • interval:表示一个从现在开始的事件,其值由一个数值和单位构成。

interval参数语法格式如下:

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

6.4修改事件

语句格式如下:

ALTER
    [DEFINER={user | CURRENT_USER}]
    EVENT event_name
    [ON SCHEDULE schedule]
    [ON COMPLETION [NOT] PRESERVE]
    [RENAME TO new_event_name]
    [ENABLE | DISABLE |DISABLE ON SLAVE]
    [DO event_body]

6.5删除事件

语句格式如下:

drop event if exists 事件名;

  • 41
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值