目录
25.1 limit是将查询结果集的一部分取出来,通常使用在分页查询当中
27.1建表的语法格式(建表属于DDL语句,DDL包括:create drop alter)
分页的作用是为了提高用户的体验,因为一次全部都查出来,用户体验差,可以一页一 页翻页看
例:按照薪资降序,取出排在前五名的员工?
mysql> select ename,sal from emp order by sal desc limit 5;//取前五条记录
完整用法:limit startIndex,length
startIndex是起始下标,length是长度
注意起始下标从0开始
缺省用法:limit 5;这是取前五,默认从头开始
注意: mysql当中limit在order by之后执行!!!
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表示长度
mysql> select ename,sal from emp order by sal desc limit 4,5;
每页显示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
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
creat table 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型);
或
creat table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
);
表名:建议以t_或者tbl_开始,可读性强,见名知意
字段名:见名知意
表名和字段名都属于标识符
很多数据类型,我们只需要掌握一些常见的数据类型即可
可变长度的字符串
比较智能,节省空间
会根据实际的数据长度动态分配空间
优点:节省空间
缺点:需要动态分配空间,速度慢
定长字符串
不管实际的数据长度是多少
分配固定长度的空间去存储数据
使用不恰当的时候,可能会导致空间的浪费
优点:不需要动态分配空间,速度快
缺点:使用不当可能会导致空间的浪费
性别字段选什么?因为性别是固定长度的字符串,所以选择char
姓名长度选什么?每一个人的名字长度不一样,所以选择varchar
数字中的整数型,等同于java中int
数字中的长整型。等同于java中的long
单精度浮点型数据
双精度浮点型数据
短日期
长日期
字符大对象
最多可以存储4g的字符串
比如:存储一篇文章,存储一个说明
超过255个字符的都要采用clob字符大对象来存储
Character large object:clob
二进制大对象
Binary large object:blob
专门用来存储图片,声音,视频等流媒体数据
往blob类型的字段上插入数据的时候,例如插入一个图片,视频等
需要使用io流才行
学号,姓名,年龄,性别,邮箱地址
create table t_student(
no int,
name varchar(32),
sex char(1),
age int(3),
email varchar(255)
);
括号里面的数字是推荐长度,实际长度超了也没关系,不会报错,只是一个建议长度
drop table t_student;//当这张表不存在的时候会报错!
还有一种写法,建议用下面这个写法
drop table if exists t_student;//如果这张表存在的话,删除,不会报错
上面我们把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指定默认值
- 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,'wangwu@123.com');
上面这样写是可以插入的
不过还是建议把字段名写出来,可读性强一点
在第三章提到了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
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()函数
语法格式:
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;
查询一下就可以发现已经修改成功了
语法格式:
delete from 表名 where 条件
注意:没有条件,整张表的数据会全部删除
例:我们删除上表中的第二条记录,也就是wanger的记录
mysql> delete from t_user where id=2;
查询一下发现已经删除了
怎么删除所有记录:
mysql> delete from t_user;//直接delete from 表名即可
查询一下可以发现记录全部都删除了