mysql SQL_CALC_FOUND_ROWS 特性: 一条 sql 语句同时查出总数及分页结果

介绍了如何通过利用 mysql SQL_CALC_FOUND_ROWS 特性, 在一条 sql 语句里同时查出总数及分页结果

展示分页列表是一个常见的开发需求, 需要查询出总数及分页数据.

传统分页查询做法

传统上, 这个一般是通过两条 sql 去实现. 先是查询总数, 比如这样:

select count(*) from programmer where age >= 35;

然后再查分页结果:

select * from programmer where age >= 35 limit 0, 10;

如果是简单的查询还好, 但对于一些复杂的涉及很多条件的查询, 往往需要重复那些条件.

注: 在 mybatis 中, 你可以把公共的条件抽取出来做成一个可复用模块, 不过这样一来结构就相对复杂了, 也不是那么直观.

那么, 是否有方式可以避免上述麻烦, 一条语句就可以查出总数及分页结果呢? 那就要用到 mysql 里的 SQL_CALC_FOUND_ROWS 特性了.

继续阅读

如果均可以的情况下, 存储时间应该优先使用 timestamp 而不是 datetime, 因为前者只需 4 字节, 而后者需 8 字节.

在插入记录时, 如果没有为第一个 timestamp 列指定值时, 会自动设置为当前时间;

更新记录时, 也会默认自动更新第一个 timestamp 列(除非 update 中另外指定了值).

--<<高性能 MySql>>

Java 这商标属于 Oracle, 但你可能不知道 Javascript 的商标也属于 Oracle;

Oracle 数据库自然是 Oracle 家的, 其实 Mysql 也是它家的...

Mysql 的示例数据库 Sakila 介绍

介绍了 mysql 的示例数据库 sakila,包括安装,下载,导入,以及业务和结构的简要介绍。

在自学或者在一些个人项目上实践一些新特性时,经常需要有数据库的配合,但通常,公司的数据库是不能拿来私用的,这时如果有一些示例数据库就好办多了。

虽然也可以自行构建一个数据库并插入数据,但通常是一件较为麻烦的事,特别是准备那些有意义的数据。

Sakila 示例数据库简介

Sakila 是 mysql 中的一个示例数据库(sample database),提供了一个标准的方案,可用于自学,写书,教程,文章以及示例等等。

此示例数据库还展示了 mysql 的一些最新特性,比如视图(Views),存储过程(Stored Procedures),触发器(Triggers)等。

下载与安装

较新的 mysql 安装包通常带有这个示例数据库,只要在安装时选择完全安装,或者在自定义安装时注意勾选示例数据库即可。

也可以到 https://dev.mysql.com/doc/index-other.html 这个页面下载,或点击这个链接 http://downloads.mysql.com/docs/sakila-db.zip 直接下载。

下载的安装包中包含三个文件:sakila-schema.sql,sakila-data.sql 和 sakila.mwb。其中:

sakila-schema.sql 是数据库的建表语句等,

sakila-data.sql 是数据,

sakila.mwb 是 mysql Workbench 数据结构模型文件。(可忽略)

导入数据库

假如把上述文件放到了 C:/temp/sakila-db/ 下,则先通过

shell> mysql -u root –p

进入数据库,再通过以下语句导入 schema 定义:

mysql> SOURCE C:/temp/sakila-db/sakila-schema.sql;

再通过以下语句导入数据:

mysql> SOURCE C:/temp/sakila-db/sakila-data.sql;

你也可以通过一些数据库管理工具导入,此处不再介绍。

Sakila 数据库业务与结构

它是一个关于 DVD(电影)租赁店业务的数据库。包含的一些表比如有:

actor(演员),film(电影),category(类别),inventory(库存),customer(顾客),rental(租赁信息)等。

应该说这个业务也是较为常见,也较容易理解的。一个完整的表关系图如下:

image

此图即来自上述文件 sakila.mwb。

关于 sakila 示例数据库的介绍就到这里。

mysql 创建本地用户并赋予数据库权限示例

简要介绍了在 mysql 中如何创建一个本地用户并赋予相应数据库权限。

在安装 mysql 时通常会生成一个超级用户 root,很多人之后就一直沿用这一个用户,虽然这会很方便,但超级用户权限太大,在所有地方使用它通常是一个安全隐患。

这一点跟操作系统的用户管理也是类似的,多数人贪图方便都直接使用 administrator 或 root 用户,其实是一种不建议的做法。

那么,要如何在 mysql 中创建 root 之外的用户并赋予相应权限呢?我们直接来看一个示例:

CREATE USER 'golden'@'localhost' IDENTIFIED BY 'gd2017'; GRANT ALL ON myapp.* TO 'golden'@'localhost'; FLUSH PRIVILEGES;

对上述语句,这里简单解析一下:

1、create user 语句用于创建用户(及密码)。

其中 golden 是用户名,gd2017 是密码。localhost 则表明是本地用户。

2、grant 语句用于对用户进行赋权。

其中,all 表示所有的权限,包括对数据的增删改查及更改数据库;myapp 为具体某个数据库名,myapp.* 表示该数据库下所有的表(以及视图等);golden 则为刚才所建立的用户名。

3、flush 语句使更改生效。

通常,以上设置能满足一般的需求了,更细化的配置,可以参考 mysql 官方在线文档(5.7 版):https://dev.mysql.com/doc/refman/5.7/en/create-user.htmlhttps://dev.mysql.com/doc/refman/5.7/en/grant.html