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】
【死锁】