//計(jì)算日期時(shí)間差
timestampdiff(顯示形式,第一個(gè)日期,第二個(gè)日期);
//第一個(gè)參數(shù)的形式
1. FRAC_SECOND陈惰。表示間隔是毫秒
2. SECOND红符。秒
3. MINUTE揍拆。分鐘
4. HOUR禁漓。小時(shí)
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 別名? ? ? ? ? ? ? ? ? -------------結(jié)束
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執(zhí)行效率
索引:書的目錄疮跑,查找目錄要比查找內(nèi)容速度快
mysql索引:mysql->data
索引和數(shù)據(jù)是同步更新(insert,update,delete)的,若給表中所有字段加索引,反而查詢速度會(huì)慢
mysql可以承受百萬級(jí)別的數(shù)據(jù):1200000
家用臺(tái)式機(jī)可執(zhí)行2000/秒凸舵,配置較好的服務(wù)器可執(zhí)行5000~8000/秒
1000000/2000 = 500秒=8分鐘
mysql索引類型:
(1)主索引(primary key):主鍵屬于索引祖娘,是索引的一種,設(shè)置主鍵的字段啊奄,會(huì)自動(dòng)增長(zhǎng)渐苏,非空且唯一。
(2)一般索引(index):任何字段都可以加
(3)唯一索引(unique):加唯一索引的字段值不能重復(fù)
(4)全文索引(fulltext):生成全文索引是一件特別消耗時(shí)間菇夸、磁盤空間的做法
(5)組合索引:多個(gè)字段聯(lián)合起來作為一個(gè)索引
//添加索引(兩種寫法)琼富,對(duì)已經(jīng)存在的表
//(1)一個(gè)字段可以添加多個(gè)索引
(2)加索引(unique)的字段值不允許為空
+
alter table 表名 add 索引類型 索引名稱(字段);
alter table books add index index_bName(b_name);
//兩個(gè)字段作為組合索引
alter table score add unique uni_stid_coid(stid,coid);
create unique index uni_bName on books(b_name);
//創(chuàng)建表添加索引
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
);
//主鍵,外鍵與索引
主外鍵自動(dòng)索引
若要主外鍵的索引庄新,必須先把主外鍵約束去掉
//查看索引
show create table 表名;
show index from 表名;
//刪除索引
alter table 表名 drop index 索引名;
alter table staff2 drop index uni_name;
//談?wù)勀銓?duì)索引看法:
(1)mysql索引類型
(2)使用索引的注意事項(xiàng)(索引的利弊)
索引和數(shù)據(jù)是同步更新(insert,update,delete)的,若給表中所有字段加索引鞠眉,反而查詢速度會(huì)慢,
給合適的字段加合適的索引择诈,可以提高查詢效率
//視圖
定義:視圖是一個(gè)臨時(shí)表械蹋、虛擬表,由select語句執(zhí)行后的結(jié)果組成一張表
作用:簡(jiǎn)化查詢
圖書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;
//創(chuàng)建一個(gè)視圖
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表中的數(shù)據(jù)羞芍,視圖中的數(shù)據(jù)會(huì)變化
//視圖中的數(shù)據(jù)能否修改哗戈?
(1)如果只修改(insert,update,delete)單張表的數(shù)據(jù),是可以修改的,并且原表的數(shù)據(jù)也跟著變化
(2)不能同時(shí)修改(insert,update,delete)來自兩張表的數(shù)據(jù)
學(xué)生ID 學(xué)生姓名 科目? 成績(jī)
//觸發(fā)器(trigger)
定義:當(dāng)執(zhí)行一個(gè)動(dòng)作時(shí)荷科,引起了其他一系列的操作唯咬。
//創(chuàng)建學(xué)生數(shù)量表
create table st_count(
number int(11) not null default 0
);
//創(chuàng)建觸發(fā)器語法
create trigger 觸發(fā)器名稱
觸發(fā)的時(shí)機(jī) //before,after
觸發(fā)的動(dòng)作 //insert,update,delete
on 引起觸發(fā)器的表名稱
for each row
執(zhí)行的sql語句;
//執(zhí)行單條sql語句的觸發(fā)器
//在student表中刪除一條數(shù)據(jù)之后纱注,st_count的學(xué)生數(shù)量自動(dòng)-1
create trigger tri_after_del
after delete
on student for each row
update st_count set number = number -1;
//student執(zhí)行delete操作
delete from student where stid = 7;
//執(zhí)行多條sql語句的觸發(fā)器
//在student表中存入一條數(shù)據(jù)之后,
(1)st_count的學(xué)生數(shù)量自動(dòng)+1
(2)score自動(dòng)存入學(xué)生一條成績(jī)
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結(jié)構(gòu)胆胰,可以定義一個(gè)執(zhí)行多條sql語句的觸發(fā)器
//delimiter 定義mysql中的分隔符
在mysql中,';'標(biāo)志著sql語句的結(jié)束奈附,但是在觸發(fā)器要執(zhí)行的Sql語句中要使用到';',所有需要重新定義分隔符
delimiter //? 敲//才執(zhí)行Sql
//調(diào)用:student執(zhí)行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','江蘇');
//查看觸發(fā)器
show triggers;
//刪除觸發(fā)器(注意外鍵約束)
drop trigger 觸發(fā)器名稱;
//mysql存儲(chǔ)過程 = java封裝方法
定義:是一組為了完成特定功能的Sql語句煮剧,經(jīng)過編譯之后存在數(shù)據(jù)庫(kù)中,用戶通過指定存儲(chǔ)過程的名稱并給定參數(shù)(若有參數(shù))來調(diào)用執(zhí)行它
mysql變量:
(1)用戶變量:用戶自己定義的變量
a)定義:以@開始将鸵,形式:@變量名//@a
b)賦值:set @a = 10;
c)作用范圍:整個(gè)客戶端勉盅,當(dāng)客戶端退出時(shí),用戶變量消失顶掉,所以也叫會(huì)話變量
d)訪問:select @a;
(2)局部變量:
a)定義:declare b int;//沒有default設(shè)置value值時(shí)草娜,默認(rèn)值是Null
declare c int default 10;
b)賦值:set b = 8;
c)作用范圍:在begin到end語句塊之間。
//創(chuàng)建一個(gè)存儲(chǔ)過程
create procedure 存儲(chǔ)過程名稱([參數(shù)1],[參數(shù)2],...)
begin
要執(zhí)行的sql語句;
end
//創(chuàng)建一個(gè)不帶參數(shù)的存儲(chǔ)過程
//獲取所有員工信息
create procedure getStaff()
begin
select * from staff;
end
//調(diào)用存儲(chǔ)過程
call getStaff();
//存儲(chǔ)過程中的參數(shù)類型
in:表示輸入?yún)?shù),默認(rèn)為in痒筒,可以不寫
out:表示輸出參數(shù),mysql沒有return,所以返回值要定義為out
inout:既可以是輸入?yún)?shù)宰闰,也可以是輸出參數(shù)
function sum(a,b){
return a+b;
}
//創(chuàng)建一個(gè)帶參數(shù)的存儲(chǔ)過程
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
//調(diào)用帶參數(shù)的存儲(chǔ)過程
call pro_add(2,3);
表名aa
字段view
update aa set view = view + 1;//瀏覽量加1