0
点赞
收藏
分享

微信扫一扫

MySQL高级应用(触发器、索引、锁机制、存储引擎等等)

天际孤狼 2022-04-07 阅读 48

MySQL高级

一、视图 view

1.1、概念

1.2、作用

1.3、语法

-- ===================================  视图  ====================================
-- 1、创建视图
CREATE view view_1 as SELECT * from employees where salary >5000;

-- 2、查看视图
SELECT * from view_1;

-- 3、查看视图结构
desc view_1;

-- 4、查看创建视图的语句
show create view view_1;

-- 5、修改视图
alter view view_1 as select * from  employees WHERE salary <= 5000;

-- 6、删除视图
drop view view_1;

二、存储过程 procedure

2.1、概念

2.2、优点

2.3、缺点

2.4、使用

2.5、案例

-- ================================  存储过程  ==================================

-- 1、 创建存储过程
delimiter $$   -- 声明结束标识符
	create procedure pro_1()
	begin 
		select * from employees;
	end $$
delimiter $$  

-- 2、调用
call pro_1();

-- 3、带入参【in】的存储过程  出参用【out】
-- 案例1:根据传递的员工编号来查询员工名
delimiter $$
	CREATE procedure pro_2(in id int,out username varchar(32))
	begin 
		select last_name into username from employees where employee_id = id;
	end $$
delimiter $$


call pro_1(103,@username); -- 调用 @变量
select @username;  -- 查询变量

-- 案例:创建存储过程,实现传递n值,获取n以内的整数和
delimiter $$
	CREATE procedure sum1(in n int,out sum int)
		BEGIN
			declare i int default 1 ;   -- 定义默认值
		  declare sums int DEFAULT 0 ;
			while i <= n do 
				SET sums = sums + i;
				SET i = i + 1;
			end while;  
			SET sum = sums;
		end $$
delimiter $$

-- 调用存储过程
call sum1(100,@sum);
SELECT @sum;

-- 删除存储过程
drop procedure pro_1;
drop procedure sum1;

三、触发器 tigger

3.1、概念

3.2、语法

3.3、使用

-- =============================  触发器  ==================================
-- 1、创建一个表
use java0210

CREATE table if not EXISTS user_log(
		id int PRIMARY KEY auto_increment comment '日志编号',
		log_time datetime comment '时间',
		msg varchar(32) comment '日志信息'
)comment  '用户日志表';

-- 2、创建触发器--监听对user表插入后的
delimiter $$
	create trigger trig1 after insert on user for each row 
		begin 
			insert into user_log(log_time,msg) values (now(),'user表中插入了一条数据');
		end $$
delimiter $$
--说明:
-- MySQL 中定义了 NEW 和 OLD,⽤来表示触发器的所在表中,触发了触发器的那⼀⾏数据,来引⽤触发器中发⽣变化的记录内容,具体地:
--   ① 在INSERT型触发器中,NEW⽤来表示将要(BEFORE)或已经(AFTER)插⼊的新数据;
--   ② 在UPDATE型触发器中,OLD⽤来表示将要或已经被修改的原数据,NEW⽤来表示将要或已经修改为的新数据;
--   ③ 在DELETE型触发器中,OLD⽤来表示将要或已经被删除的原数据;
desc user;
insert into user(name,age) VALUES('陈爽',27);
SELECT * from user_log;

-- 删除触发器
drop trigger trig1;

delimiter $$
	create trigger trig2 after update on user for each row 
		begin 
			insert into user_log(log_time,msg) values (now(),concat ('修改前:',old.name,'------修改后:',new.name ));
		end $$
delimiter $$


update user set name = '张三' WHERE age = 27;
update user set name = 'lisi' WHERE age = 27;
SELECT * from user_log;

四、存储引擎

4.1、概念

4.2、详解

4.2.1、MyISAM

特点

文件存储格式:

4.2.2、InnoDB

特点

文件存储格式:

4.2.3、指定存储引擎

建表时

 create table 表名(
     id bigint(12),
     name varchar(200)
 ) ENGINE=MyISAM;
 
 create table 表名(
     id int(4),
     cname varchar(50)
 ) ENGINE=InnoDB;

已建表修改

 alter table 表名 engine = innodb;

五、索引

5.1、概念

5.2、分类

5.3、创建索引

CREATE TABLE if not EXISTS tb01(
	id int PRIMARY KEY,
	xx varchar(24),
	index xx
)

-- 添加索引
alter TABLE user add index index_i(name,age);

-- 查看表中索引
show index from user;

-- 删除索引
drop index index_i on user;

5.4、索引使用

1、建议使用

2、不建议使用

3、注意事项

六、锁机制

6.1、锁概念

6.2、锁分类

1、从对数据操作的类型(读\写)分

2、从对数据操作的粒度分

3、从锁的用法分

【悲观锁】

【乐观锁】

【间隙锁 GAP】

【死锁】

举报

相关推荐

0 条评论