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 创建本地用户并赋予数据库权限示例

简要介绍了在 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