数据蛙数据分析每周作业

mysql高级

2020-09-26  本文已影响0人  苏甜酒_x

视图

视图就是一个虚拟的表,是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

```

上一篇下一篇

猜你喜欢

热点阅读