9月30日我的学习心得与个人理解

视图

通过查询得到一张虚拟表,然后保存下来,下次直接使用

优点

通过视图,如果频繁使用一张虚拟表,可不用重复查询

create view 视图名 as 表名  创建一张视图

drop view 视图名        删除视图

 

 

 触发器

共有6种触发的情况

增前  增后  删前  删后  改前  改后

语法结构

create trigger 触发器名 before/after insert/update/delete on 表名 for each row

begin

  sql代码

end

触发器的名字最好做到见名知意

针对插入/删除/修改

create trigger tri_after_insert_t1 after insert/delete/update on 表名 for each row

begin

  sql代码

end

修改MySQL默认的结束符

delimiter $$  将结束符修改为$$

delimiter ;   再改回;

 

 

 触发器案例

create table cmd(

  id int primary key auto_increment,

  user char(32),

  priv char (10),

  cmd char (64),

  sub_time datetime,  提交时间

  success enum ('yes', 'no')  0代表失败

);

create table errlog(

  id int primary key auto_increment,

  err_cmd char (64),

  err_time datetime

);

 

 

delimiter $$

create trigger tri_after_insert_cmd after insert on cmd for each row begin

  if NEW.success = 'no' then  #新纪录都会被MySQL封装成NEW对象

    insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);

  end if;

end $$

delimiter;  结束后需再改回来,否则结束符一直是$$

在表cmd中插入数据。触发触发器,根据IF条件决定是否插入了错误日志

INSERT INTO cmd(

  USER,

  priv,

  cmd,

  sub_time,

  success

)

VALUES

  ('tony','1111','ls -l /etc',NOW(),'yes'),

  ('linda','2222','cat /etc/passwd',NOW(),'no')

drop trigger tri_after_insert_cmd;  删除触发器

事物

开启一个事物可以包含一些SQL语句,这些SQL语句要么同时成功,要么一个都不能成功,称为事物的原子性

事物属性:原子性,一致性,隔离性,持久性。这4个属性通常称为ACID特性。

事物作用:保证了数据操作时的安全性

start transaction;  开启事物操作

rollback      回滚到上一个状态

commit       刷新到硬盘

函数

类似于Python中的内置函数

select date_format(sub_time,'%Y-%m'),count(id) from blog group by data_format(sub_time,'%Y-%m');

MySQL中的流程控制

if判断

delimiter

CREATE PROCEDURE proc_if ()

BEGIN

  declare i int default 0;

  if i = 1 THEN

    SELECT 1;

  ELSEIF i = 2 THEN

    SELECT 2;

  ELSE

    SELECT 7;

  END IF;

END

delimiter;

while循环

delimiter

CREATE PROCEDURE proc_while()

BEGIN

  DEClARE num INT;

  SET num = 0;

  WHILE num < 10 DO

    SELECT

      num;

    SET num = num + 1;

  END WHILE;

END

delimiter;

索引

索引就是一种数据结构,类似于书的目录。在MySQL中也叫做“键”,是存储引擎用于快速找到记录的数据结构

primary key   聚集索引,主键 

unique key     辅助索引

index key  

primary key, unique key出来有索引功能外,还有额外的限制条件

index key没有任何的限制条件单纯的用来表示索引

索引本质都是通过不断缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件

索引不能滥用

1.表中有大量数据时,创建索引速度会很慢

2.索引创建完毕后,对表的查询性能会大幅度提升,但是写的性能会降低

create index idx_name on s1(name);      给表s1的name字段创建索引

create index idx_id on s1(id);           给表s1的id字段创建索引

select name from emp where name='tony'    name是覆盖索引

select age,email from emp where name='tony'   name是非覆盖索引

b+树

b+树只有叶子节点才会存放真正的数据,其他节点都仅仅存放索引用来指向数据的查询方向

b+树层级越高查询次数越多,所以应尽量降低b+树的层级

针对索引的测试

1.准备表

create table s1(

id int,

name varchar(20),

gender char(6),

email varchar()

);

2.创建存储过程,实现批量插入记录

delimiter $$  声明存储过程的结束符号$$

create procedure auto_insert1()

BEGIN

  declare i int default 1;

  whilei<(3000000)do

    insert into s1 values(i,'mark','john',concat('john',i,'邮箱地址'));

    set i = i + 1;

  end while;

END$$  #$$

delimiter;  重新声明分号为结束符号

3.查看存储过程

show create procedure auto_insert1\G

4.调用存储过程

call auto_insert1();

 

posted @ 2020-10-03 22:57  ACE2020  阅读(155)  评论(0)    收藏  举报