• 学习MySQL-第六章


    目录

    25,limit(非常重要)

    25.1 limit是将查询结果集的一部分取出来,通常使用在分页查询当中

    25.2limit怎么用呢?

    25.3注意

    25.4取出工资排名在3-5名的员工?

    25.5取出工资排名在5-9名的员工

    25.6分页

    26,关于DQL语句的总结:

    27,表的创建(建表)

    27.1建表的语法格式(建表属于DDL语句,DDL包括:create drop alter)

    27.2关于mysql中的数据类型?

    varchar(最长255)

    char(最长255)

    varchar和char我们应该怎么选择?

    int(最长11)

    bigint

    float

    double

    date

    datetime

    clob

    blob

    27.3创建一个学生表

    27.4删除表

    27.5插入数据insert(DML语句)

    27.6 insert插入日期

    27.7date和datetime两个类型的区别

    27.8修改update(DML)

    27.9删除数据delete(DML)


    25,limit(非常重要)

    25.1 limit是将查询结果集的一部分取出来,通常使用在分页查询当中

    分页的作用是为了提高用户的体验,因为一次全部都查出来,用户体验差,可以一页一 页翻页看

    25.2limit怎么用呢?

    例:按照薪资降序,取出排在前五名的员工?

    mysql> select ename,sal from emp order by sal desc limit 5;//取前五条记录

     完整用法:limit startIndex,length

    startIndex是起始下标,length是长度

    注意起始下标从0开始

    缺省用法:limit 5;这是取前五,默认从头开始

    25.3注意

    注意: mysql当中limit在order by之后执行!!!

    25.4取出工资排名在3-5名的员工?

    mysql> select ename,sal from emp order by sal desc limit 2,3;

    +-------------+------------+

    | ename    | sal          |

    +------------+------------+

    | FORD    | 3000.00  |

    | JONES  | 2975.00  |

    | BLAKE   | 2850.00  |

    +------------+------------+

    2表示起始位置从下表2开始,就是第三条记录

    3表示长度

    25.5取出工资排名在5-9名的员工

    mysql> select ename,sal from emp order by sal desc limit 4,5;

    25.6分页

    每页显示3条记录

    第一页:limit 0,3

    第二页:limit 3,3

    第三页:limit 6,3

    第四页:limit 9,3

    每页显示pagesize条记录

    第pagesize页:limit (pageNo-1)*pagesize,pagesize

    1. Public static void main(String[] args)
    2. {
    3. //用户提交过来一个页码,以及每页显示的记录条数
    4. int pageNo=5;//第五页
    5. int pagesize=10;//每页显示10条记录
    6. int startIndex=(pageNo-1)*pagesize;
    7. String sql=select.....limit+”startIndex”+”,”+”pagesize”;
    8. }

    记公式:

    limit (pageNo-1)*pagesize,pagesize

    26,关于DQL语句的总结:

    select

            ...

    from

            ...

    where

            ...

    group by

            ...

    having

            ...

    order by

            ...

    limit

            ...

    执行顺序:

    1,from

    2,where

    3,group by

    4,having

    5,select

    6,order by

    7,limit

    27,表的创建(建表)

    27.1建表的语法格式(建表属于DDL语句,DDL包括:create drop alter)

    creat table 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型);

    creat table 表名(

            字段名1 数据类型,

            字段名2 数据类型,

            字段名3 数据类型

    );

    表名:建议以t_或者tbl_开始,可读性强,见名知意

    字段名:见名知意

    表名和字段名都属于标识符

    27.2关于mysql中的数据类型?

    很多数据类型,我们只需要掌握一些常见的数据类型即可

    varchar(最长255)

            可变长度的字符串

            比较智能,节省空间

            会根据实际的数据长度动态分配空间

            优点:节省空间

            缺点:需要动态分配空间,速度慢

    char(最长255)

            定长字符串

            不管实际的数据长度是多少

            分配固定长度的空间去存储数据

            使用不恰当的时候,可能会导致空间的浪费

            优点:不需要动态分配空间,速度快

            缺点:使用不当可能会导致空间的浪费

    varchar和char我们应该怎么选择?

            性别字段选什么?因为性别是固定长度的字符串,所以选择char

            姓名长度选什么?每一个人的名字长度不一样,所以选择varchar

    int(最长11)

            数字中的整数型,等同于java中int

    bigint

            数字中的长整型。等同于java中的long

    float

            单精度浮点型数据

    double

            双精度浮点型数据

    date

            短日期

    datetime

            长日期

    clob

            字符大对象

            最多可以存储4g的字符串

            比如:存储一篇文章,存储一个说明

            超过255个字符的都要采用clob字符大对象来存储

            Character large object:clob

    blob

            二进制大对象

            Binary large object:blob

            专门用来存储图片,声音,视频等流媒体数据

            往blob类型的字段上插入数据的时候,例如插入一个图片,视频等

            需要使用io流才行

    27.3创建一个学生表

    学号,姓名,年龄,性别,邮箱地址

    create table t_student(

            no int,

            name varchar(32),

            sex char(1),

            age int(3),

            email varchar(255)

    );

    括号里面的数字是推荐长度,实际长度超了也没关系,不会报错,只是一个建议长度

    27.4删除表

    drop table t_student;//当这张表不存在的时候会报错!

     

     还有一种写法,建议用下面这个写法

    drop table if exists t_student;//如果这张表存在的话,删除,不会报错

    27.5插入数据insert(DML语句)

    上面我们把t_student表删除了,我们再创建回来

    语法格式:

            insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3);

    注意:字段名和值要一一对应,什么是一一对应,数量要对应,数据类型要对应

    insert into t_student(no,name,sex,age,email) values(1,'zhangsan','m',20,'zhan gsa n@123.com');

     可以看到已经插入到表中了

    //如果字段名是颠倒的也可以插入,不过值也要与之对应

    mysql> insert into t_student(email,name,sex,age,no) values('lisi@123.com','lisi','f','1 9','2');

     上面语句也插入成功了

    //只给一个字段赋值也是可以的,没赋值的则默认是null

    mysql> insert into t_student(no) values(3);

    注意:insert语句但凡执行成功了,那么必然会多一条记录

    没有给其他字段指定值的话,默认值是NULL

    需要注意的是创建表的时候可以对字段名指定默认值

    我们先删除这个t_student表

    mysql> drop table if exists t_student;

    然后再创建这个表,并且给sex指定默认值

    1. mysql> create table t_student(
    2. no int,
    3.      name varchar(32),
    4.      sex char(1) default 'm',
    5.      age int(3),
    6.      email varchar(255)
    7. );

    这样我们就给sex指定了m的默认值

     之后我们插入记录时,如果不设置sex,则默认就是m

    1. mysql> insert into t_student(no) values(1);
    2. mysql> select * from t_student;

     insert语句中的”字段名”可以省略吗?可以

    需要注意的是,前面的字段名省略的话,等于都写上了,所以值也要都写上

    mysql> insert into t_student values(2,'wangwu','f',21,'wangwu@123.com');

    上面这样写是可以插入的

     不过还是建议把字段名写出来,可读性强一点

    27.6 insert插入日期

    在第三章提到了str_to_date和date_format这两个处理函数

    str_to_date:将字符串varchar类型转换成date类型

    date_to_format:将date类型转换成具有一定格式的varchar字符串类型

    注意:数据库中的有一条命名规范:所有的标识符都是全部小写,单词和单词之间使用下划线进行衔接

    这两个函数有什么用呢?

    我们把上面的t_student表删除,创建一个带有date类型的表

    mysql->drop table if exists t_student;
    1. mysql->create table t_student(
    2. id int(11),
    3.     name varchar(32),
    4.     birth date//生日可以使用字符串
    5. );

    我们上面添加了一个date类型的字段,下面演示一下怎么插入日期

    mysql> insert into t_student(id,name,birth) values(1,'zhangsan','01-10-1990');// 1990101

    出问题了:原因是类型不匹配,数据库birth是date类型,这里给了一个字符串varchar

    怎么办?可以用str_to_date函数进行类型转换

    str_to_date函数可以将字符串转换成日期类型date

    语法格式:

    str_to_date(‘字符串日期’,’日期格式’)

    mysql的日期格式:

    %Y 年

    %m 月

    %d 日

    %h 时

    %i 分

    %s 秒

    所以修改一下上面的语句

    mysql> insert into t_student(id,name,birth) values(1,'zhangsan',str_to_date('01- 10-1990','%d-%m-%Y'));

     str_to_date函数可以将字符串varchar转换成日期date类型数据

    通常使用在插入insert方面,因为插入的时候需要一个日期类型的数据

    需要通过该函数将字符串转换成date

    注意:

    如果提供的日期字符串是这个格式(%Y-%m-%d),str_to_date函数就不需要 了!

    下面演示一下

    mysql> insert into t_student(id,name,birth) values(1,'zhangsan','1990-10-01');

     可以发现插入成功了

    查询的时候可以以某个特定的日期格式展示吗?

    date_format

    这个函数可以将日期类型转换成特定格式的字符串

    mysql> select id,name,date_format(birth,'%m/%d/%Y') as birth from t_studen t;

    date_format函数怎么用?

    date_form(日期类型数据,’日期格式’)

    这个函数通常使用在查询日期方面,设置展示的日期格式

    mysql> select id,name,birth from t_student;

    以上的sql语句实际上是进行了默认的日期格式化

    自动将数据库中的date类型转换成varchar类型

    并且采用的格式是mysql默认的日期格式:’%Y-%m-%d’

    实际上str_to_date和date_format是不怎么用的,比如str_to_date,我们按照199 0-10-01的格式去插入日期的话系统会自动转换成date类型的。我们在查询字段时 系统会自动进行类型转换,转换成字符串类型,所以也用不到date_format

    27.7date和datetime两个类型的区别

    date是短日期:只包括年月日信息

    datetime是长日期:包括年月日时分秒信息

    drop table if exists t_student;
    1. create table t_user(
    2. Id int,
    3. Name varchar(32),
    4. Birth date,
    5. Create_time datetime
    6. );

    id是整数

    name是字符串

    birth是短日期

    create_time是这条记录的创建时间:长日期类型

    mysql短日期默认格式:%Y-%m-%d

    mysql长日期默认格式:%Y-%m-%d %h:%i:%s

    怎么插入记录呢?

    mysql> insert into t_user(id,name,birth,create_time) values(1,'zhangsan','1990- 10-01','2022-09-18 15:42:21');

     

     可以看到已经插入成功

    在mysql中怎么获得系统当前时间呢?

    now()函数:获取的时间带有:时分秒信息!是datetime类型的

    mysql> insert into t_user(id,name,birth,create_time) values(2,'lisi','1990- 10-01',now());

     插入成功,可以发现已经插入了当前的时间,利用的就是now()函数

    27.8修改update(DML)

    语法格式:

    update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where条件;

    注意:没有条件限制会导致所有数据全部更新

    例:我们把上面表中的2号lisi的数据改一下

    mysql> update t_user set name='wanger',birth='2000-10-11' where id=2;

     查询一下就可以发现已经修改成功了

    27.9删除数据delete(DML)

    语法格式:

    delete from 表名 where 条件

    注意:没有条件,整张表的数据会全部删除

    例:我们删除上表中的第二条记录,也就是wanger的记录

    mysql> delete from t_user where id=2;

     查询一下发现已经删除了

    怎么删除所有记录:

    mysql> delete from t_user;//直接delete from 表名即可

     查询一下可以发现记录全部都删除了

  • 相关阅读:
    NetCDF数据在ArcMap中的使用
    linux安裝maven
    网盟广告定位条件以及所需素材
    字符串的大小(补充)
    vue中属性的基本用法
    【正点原子FPGA连载】第二十八章 以太网ARP测试实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
    Unity学习之Shader属性
    建站过程中的踩坑记录:自定义域名、百度收录与备案
    Spring学习|Bean的作用域、自动装配Bean、注解实现自动装配、Spring注解开发
    【Android中RecyclerView刷新导致源数据被刷新】
  • 原文地址:https://blog.csdn.net/qq_52905520/article/details/126910360