//计算日期时间差
timestampdiff(显示形式,第一个日期,第二个日期);
//第一个参数的形式
1. FRAC_SECOND。表示间隔是毫秒
2. SECOND。秒
3. MINUTE。分钟
4. HOUR。小时
5. DAY。天
6. WEEK。星期
7. MONTH。月
8. QUARTER。季度
9. YEAR。年
select timestampdiff(week,'2017-2-7','2017-3-7') as diff;
//判断条件
2.Case when用法:
SELECT 字段1,
case -------------如果
when sex='1' then '男' -------------sex='1',则返回值'男'
when sex='2' then '女' -------------sex='2',则返回值'女'
else ’其他’ -------------其他的返回'其他’
end
as 别名 -------------结束
from sys_user --------整体理解: 在sys_user表中如果sex='1',则返回值'男'如果sex='2',则返回值'女' 否则返回'其他’
select name,
case
when sex=1 then '男'
when sex=2 then '女'
else '其他'
end
as sex
from staff;
//索引:提高mysql执行效率
索引:书的目录,查找目录要比查找内容速度快
mysql索引:mysql->data
索引和数据是同步更新(insert,update,delete)的,若给表中所有字段加索引,反而查询速度会慢
mysql可以承受百万级别的数据:1200000
家用台式机可执行2000/秒,配置较好的服务器可执行5000~8000/秒
1000000/2000 = 500秒=8分钟
mysql索引类型:
(1)主索引(primary key):主键属于索引,是索引的一种,设置主键的字段,会自动增长,非空且唯一。
(2)一般索引(index):任何字段都可以加
(3)唯一索引(unique):加唯一索引的字段值不能重复
(4)全文索引(fulltext):生成全文索引是一件特别消耗时间、磁盘空间的做法
(5)组合索引:多个字段联合起来作为一个索引
//添加索引(两种写法),对已经存在的表
//(1)一个字段可以添加多个索引
(2)加索引(unique)的字段值不允许为空
+
alter table 表名 add 索引类型 索引名称(字段);
alter table books add index index_bName(b_name);
//两个字段作为组合索引
alter table score add unique uni_stid_coid(stid,coid);
create unique index uni_bName on books(b_name);
//创建表添加索引
create table staff2(
id int(11) not null auto_increment primary key,
name varchar(255) not null,
unique uni_name(name)
);
create table staff3(
id int(11) not null auto_increment primary key,
name varchar(255) not null unique
);
//主键,外键与索引
主外键自动索引
若要主外键的索引,必须先把主外键约束去掉
//查看索引
show create table 表名;
show index from 表名;
//删除索引
alter table 表名 drop index 索引名;
alter table staff2 drop index uni_name;
//谈谈你对索引看法:
(1)mysql索引类型
(2)使用索引的注意事项(索引的利弊)
索引和数据是同步更新(insert,update,delete)的,若给表中所有字段加索引,反而查询速度会慢,
给合适的字段加合适的索引,可以提高查询效率
//视图
定义:视图是一个临时表、虚拟表,由select语句执行后的结果组成一张表
作用:简化查询
图书ID 图书名称 图书类型
select bk.id,bk.b_name,bt.type_name from books bk
left join book_type bt
on bk.type_id = bt.type_id;
//创建一个视图
create view 视图名称 as 查询语句;
create view bookinfo as
select bk.id,bk.b_name,bt.type_name from books bk
left join book_type bt
on bk.type_id = bt.type_id;
//若修改了books或book_type表中的数据,视图中的数据会变化
//视图中的数据能否修改?
(1)如果只修改(insert,update,delete)单张表的数据,是可以修改的,并且原表的数据也跟着变化
(2)不能同时修改(insert,update,delete)来自两张表的数据
学生ID 学生姓名 科目 成绩
//触发器(trigger)
定义:当执行一个动作时,引起了其他一系列的操作。
//创建学生数量表
create table st_count(
number int(11) not null default 0
);
//创建触发器语法
create trigger 触发器名称
触发的时机 //before,after
触发的动作 //insert,update,delete
on 引起触发器的表名称
for each row
执行的sql语句;
//执行单条sql语句的触发器
//在student表中删除一条数据之后,st_count的学生数量自动-1
create trigger tri_after_del
after delete
on student for each row
update st_count set number = number -1;
//student执行delete操作
delete from student where stid = 7;
//执行多条sql语句的触发器
//在student表中存入一条数据之后,
(1)st_count的学生数量自动+1
(2)score自动存入学生一条成绩
create trigger tri_after_insert2
after insert
on student for each row
begin
update st_count set number = number+1;
insert into score values(8,1,100);
end
//使用begin ...end结构,可以定义一个执行多条sql语句的触发器
//delimiter 定义mysql中的分隔符
在mysql中,';'标志着sql语句的结束,但是在触发器要执行的Sql语句中要使用到';',所有需要重新定义分隔符
delimiter // 敲//才执行Sql
//调用:student执行Insert操作
insert into student values(9,'喵喵',22,'女','12345678909','2012-12-1','江苏');
insert into student (name,age,sex,tel,joinTime,local)values('喵喵',22,'女','12345678909','2012-12-1','江苏');
//查看触发器
show triggers;
//删除触发器(注意外键约束)
drop trigger 触发器名称;
//mysql存储过程 = java封装方法
定义:是一组为了完成特定功能的Sql语句,经过编译之后存在数据库中,用户通过指定存储过程的名称并给定参数(若有参数)来调用执行它
mysql变量:
(1)用户变量:用户自己定义的变量
a)定义:以@开始,形式:@变量名//@a
b)赋值:set @a = 10;
c)作用范围:整个客户端,当客户端退出时,用户变量消失,所以也叫会话变量
d)访问:select @a;
(2)局部变量:
a)定义:declare b int;//没有default设置value值时,默认值是Null
declare c int default 10;
b)赋值:set b = 8;
c)作用范围:在begin到end语句块之间。
//创建一个存储过程
create procedure 存储过程名称([参数1],[参数2],...)
begin
要执行的sql语句;
end
//创建一个不带参数的存储过程
//获取所有员工信息
create procedure getStaff()
begin
select * from staff;
end
//调用存储过程
call getStaff();
//存储过程中的参数类型
in:表示输入参数,默认为in,可以不写
out:表示输出参数,mysql没有return,所以返回值要定义为out
inout:既可以是输入参数,也可以是输出参数
function sum(a,b){
return a+b;
}
//创建一个带参数的存储过程
create procedure pro_add(in a int,in b int)
begin
declare sum int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set sum = a+b;
select sum;
end
//调用带参数的存储过程
call pro_add(2,3);
表名aa
字段view
update aa set view = view + 1;//浏览量加1