mysql高级

作者: 苏甜酒_x | 来源:发表于2020-09-26 16:41 被阅读0次

    视图

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

    ```

    相关文章

      网友评论

        本文标题:mysql高级

        本文链接:https://www.haomeiwen.com/subject/taocuktx.html