# emp 数据表 select * from emp;+----+------------+--------+------+--------+|id| name | sex | age | dep_id |+----+------------+--------+------+--------+|1| EGON | male |18|200||2| alex | female |48|201||3| wupeiqi | male |38|201||4| yuanhao | female |28|202||5| liwenzhou | male |18|200||6| jingliyang | female |18|204||7| lili | female |48| NULL |+----+------------+--------+------+--------+# dep 数据表 select * from dep;+-----+-----------------+|id| name |+-----+-----------------+|200| 技术 ||201| 人力资源 ||202| 销售 ||203| 运营 |+-----+-----------------+# emp2dep 数据表 select * from emp2dep;+----+-----------+--------+------+--------+--------------+|id| name | sex | age | dep_id | dep_name |+----+-----------+--------+------+--------+--------------+|1| EGON | male |18|200| 技术 ||2| alex | female |48|201| 人力资源 ||3| wupeiqi | male |38|201| 人力资源 ||4| yuanhao | female |28|202| 销售 ||5| liwenzhou | male |18|200| 技术 |+----+-----------+--------+------+--------+--------------+# 内连接
select *from emp inner join dep on emp.dep_id = dep.id;# 创建视图语法: create view 视图名称 as sql语句
create view emp2dep as
select emp.*,dep.name as dep_name from emp inner join dep on emp.dep_id = dep.id;# 修改视图记录
update emp2dep set name ='EGON' where id=1;# 修改视图
alter view emp2dep as sql语句;# 删除视图
drop view emp2dep;
2. 触发器
1. 创建触发器
# 使用触发器可以定制用户对表进行 增、删、改 操作时前后的行为,注意:没有查询# before: 操作表之前的行为 after: 操作表之后的行为# 注意:NEW 表示即将插入的数据行,OLD 表示即将删除的数据行# 触发器无法被用户直接调用,而是由于对表的【增/删/改】操作被动引发的# 增 => insert
create trigger tri_before/after_insert_t1 before/after insert on t1 for each row
begin
sql语句;
end
# 删 => delete
create trigger tri_before/after_delete_t1 before/after delete on t1 for each row
begin
sql语句;
end
# 改 => update
create trigger tri_before/after_update_t1 before/after update on t1 for each row
begin
sql语句;
end
# delimiter + 符号 => 定义结尾符号 => delimiter $$ 把sql语句结尾的分号替换为 $$ (符号自定)
delimiter //
create trigger tri_before_insert_t1 before insert on t1 for each row
begin
insert into t2 values(NEW.name);
end //
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
insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
end if;
end $$
delimiter ;
insert into cmd(user,priv,cmd,sub_time,success) values
('egon','0755','ls -l /etc',NOW(),'yes'),('egon','0755','cat /etc/passwd',NOW(),'no'),('egon','0755','useradd xxx',NOW(),'no'),('egon','0755','ps aux',NOW(),'yes');# 删除触发器
drop trigger tri_after_insert_cmd ;
# date_format 格式化时间# 案例
CREATE TABLE blog (id INT PRIMARY KEY auto_increment,
NAME CHAR (32),
sub_time datetime
);
INSERT INTO blog (NAME, sub_time)
VALUES
('第1篇','2015-03-01 11:31:21'),('第2篇','2015-03-11 16:31:21'),('第3篇','2016-07-01 10:21:31'),('第4篇','2016-07-22 09:23:21'),('第5篇','2016-07-23 10:11:11'),('第6篇','2016-07-25 11:21:31'),('第7篇','2017-03-01 15:33:21'),('第8篇','2017-03-01 17:32:21'),('第9篇','2017-03-01 18:31:21');
select date_format(sub_time,"%Y-%m")as t,count(id)from blog group by t;# 查询结果+---------+-----------+| t | count(id)|+---------+-----------+|2015-03|2||2016-07|4||2017-03|3|+---------+-----------+
5. 索引原理
1. 索引介绍
# 1. 使用索引的目的
为了优化查询速度,但是一张表一旦创建了索引,会降低写入速度
# 2. 索引概念
索引是 mysql 数据库的一种数据结构,在 mysql 里称之为 key(键)
索引是存储引擎用于快速找到记录的一种数据结构
在mysql中使用最广泛的数据引擎是 InnoDB 引擎,它里面用的是 B+ 树索引