学习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

Public static void main(String[] args)
{
    //用户提交过来一个页码,以及每页显示的记录条数

    int pageNo=5;//第五页

    int pagesize=10;//每页显示10条记录



    int startIndex=(pageNo-1)*pagesize;

    String sql=”select.....limit”+”startIndex”+”,”+”pagesize”;
}

记公式:

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 [email protected]');

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

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

mysql> insert into t_student(email,name,sex,age,no) values('[email protected]','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指定默认值

mysql> create table t_student(

     no int,

     name varchar(32),

     sex char(1) default 'm',

     age int(3),

     email varchar(255)

);

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

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

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

mysql> select * from t_student;

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

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

mysql> insert into t_student values(2,'wangwu','f',21,'[email protected]');

上面这样写是可以插入的

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

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;
mysql->create table t_student(

    id int(11),

    name varchar(32),

    birth date//生日可以使用字符串

);

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

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

出问题了:原因是类型不匹配,数据库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;
create table t_user(

    Id int,

    Name varchar(32),

    Birth date,

    Create_time datetime

);

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 表名即可

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

猜你喜欢

转载自blog.csdn.net/qq_52905520/article/details/126910360