视图
视图就是一个虚拟的表,是select语句执行后的结果集
视图的定义方式:
```
create view 视图名称 as select 语句
```
创建上述结果的视图
```
create view v_student as select s.*,c.name from students s join classes c on s.cls_id=c.id
```
删除视图
```
drop view+视图名字
```
因为视图是一个虚拟的表,所以如果更新了students表,那么视图的结果也会发生相应的更改。
## 事务
事务广泛应用于银行转账啥的,要么同时发生,要么同时不发生。
表的引擎类型必须是innodb类型才可以使用事务,这是mysql表的默认引擎
```
-- 选择数据库
use jing_dong;
-- 查看goods表
show create table goods;
```
•开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中
```
begin;
或者
start transaction;
```
•将缓存中的数据变更维护到物理表中
```
commit;
```
•放弃缓存中变更的数据
```
rollback;
```
注意:
1.修改数据的命令会自动的触发事务,包括insert、update、delete
2.而在SQL语句中有手动开启事务的原因是:可以进行多次数据的修改,如果成功一起成功,否则一起会滚到之前的数据
索引
索引可以增加我们的查询速度
# Mysql时间日期函数
- now函数:获取当前时间
```
select now()
```
- sysdate函数:获取当前时间
```
select sysdate()
```
now() 在执行开始时值就得到了;
sysdate() 在函数执行时动态得到值。
## 获取年月日
```
select current_date();
select curdate();
```
## 获取时分秒
```
select current_time();
select curtime();
```
# 时间格式的转换
==now函数返回来的格式就是标准的格式==
```
select now(3)#3位毫秒数
```
### 将字符串改成标准日期格式
```
select str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09
select str_to_date('08/09/08' , '%m/%d/%y'); -- 2008-08-09
select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); --2008-08-09 08:09:30
```
日期转换为特殊字符串形式
•date_format (日期,字符串格式):能够把一个日期转换为各种样式的字符串
```
select date_format(now(),'%Y-%M-%d %H') ; -- 2020-May-23 17
select date_format('2020-02-03 13:45:06.676','%Y-%M-%D %I:%i:%S-%T') ; --2020-February-3rd 01:45:06-13:45:06
```
# 提取时间日期
```
SELECT TIME('2018-05-15 10:37:14.123456');-- 获取时间:10:37:14.123456
SELECT YEAR('2018-05-15 10:37:14.123456');-- 获取年份: 2018
SELECT MONTH('2018-05-15 10:37:14.123456');-- 获取月份: 5
SELECT DAY('2018-05-15 10:37:14.123456');-- 获取日:15
SELECT HOUR('2018-05-15 10:37:14.123456');-- 获取时:10
SELECT MINUTE('2018-05-15 10:37:14.123456');-- 获取分:37
SELECT SECOND('2018-05-15 10:37:14.123456');-- 获取秒:14
SELECT MICROSECOND('2018-05-15 10:37:14.123456');-- 获取毫秒:123456
SELECT QUARTER('2018-05-15 10:37:14.123456');-- 获取季度:2
SELECT WEEK('2018-05-15 10:37:14.123456');-- 获取周:19
```
•extract (日期形式 from 日期内容) 函数==(但是一般不建议用这个)
==
```
SELECT EXTRACT(YEAR FROM '2018-05-15 10:37:14.123456');--获取年:2018
SELECT EXTRACT(MONTH FROM '2018-05-15 10:37:14.123456');--获取月:5
```
日期之间得计算
### 现有日期进行偏移(推荐)
•date_sub(日期 ,要减少偏移的间隔)
```
select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);
```
•date_add(日期 ,要增加偏移的间隔)
```
select date_add('2008-08-08 10:12:33', interval '01:10:30' hour_second);
```
两个日期得到指定差(推荐)
•timestampdiff(unit,begin,end):==返回end-begin的结果==,其中begin和end是date或datetime格式
==前后的数据格式必须一致。==
```
select timestampdiff(year,'2002-05-01','2001-01-01');-- -1
select timestampdiff(day,'2002-05-01','2001-01-01');-- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00');-- -12
```
网友评论