数据库第四天

//计算日期时间差

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容

  • MySQL 数据库常用命令 1、MySQL常用命令 create database name; 创建数据库 use...
    55lover阅读 4,772评论 1 57
  • 一、jdbc 1、执行sql语句 (1)executeUpdate()执行除了select语句外的,它返回的是in...
    浅水姑娘柠檬泪_d411阅读 201评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,581评论 18 399
  • (一)Oracle数据库 1.oracle中row_id理解 ORACLE的row_id是一个伪列,其个是为18个...
    独云阅读 5,585评论 0 10
  • 时间隐隐约约就过去了,开始出现一种熟悉的景象。那种,别人说的班上着上着,忘记了日子,生活是出租屋、公司、餐厅的三点...
    罗_11f3阅读 256评论 0 0