数据库第四天

//计算日期时间差

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

你可能感兴趣的:(数据库第四天)