数据库的查询
聚合查询
其中将count作为重点来说,由图所示,即为使用count()方法中需要注意的点
时间查询
官方文档中列举的是使用wheretime()进行查询的方法,但是在日常的项目开发中,时间通常是使用int类型进行存储时间戳的,所以很少会用到wheretime()方法
高级查询
https://static.kancloud.cn/manual/thinkphp5/135184
视图查询
官方文档:
视图查询可以实现不依赖数据库视图的多表查询,并不需要数据库支持视图,例如:
Db::view('User','id,name') ->view('Profile','truename,phone,email','Profile.user_id=User.id') ->view('Score','score','Score.user_id=Profile.id') ->where('score','>',80) ->select();
生成的SQL语句类似于:
SELECT User.id,User.name,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user User INNER JOIN think_profile Profile ON Profile.user_id=User.id INNER JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80
注意:视图查询无需调用
table
和join
方法,并且在调用where
和order
方法的时候只需要使用字段名而不需要加表名。
日常项目中使用的视图查询
MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。
在mysql可视化工具中理好你想要的视图,他会自己生成sql语句
SELECT
`bro_demo`.`name` AS `name`,
`bro_demo`.`id` AS `id`,
`bro_score`.`user_id` AS `user_id`,
`bro_score`.`username` AS `username`,
`bro_score`.`score` AS `score`
FROM
(
`bro_demo`
JOIN `bro_score` ON (
(
(
`bro_demo`.`id` = `bro_score`.`username`
)
AND (
`bro_demo`.`name` = `bro_score`.`score`
)
)
)
)
自我理解
视图的优点
视图的缺点
在进行数据库迁移时i,会涉及到许多逻辑问题,必须得自己理清先创建哪个表,后创建哪个表,否则会报错
别人写的视图及优缺点:MySQL视图及优缺点_徐凤年不是真无敌的博客-CSDN博客_mysql视图的优缺点
事务操作(节选官方文档)
事务的四大特性:原子性,一致性,隔离性,持久性
使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 InnoDB 引擎。
自动控制事务处理(很少使用)
Db::transaction(function(){
Db::name('user')->find(1);
Db::name('user')->delete(1);
});
手动控制事务处理
// 启动事务
Db::startTrans();
try{
Db::name('user')->find(1);
Db::name('user')->delete(1);
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
}
数据集
官方文档中设置数据集返回类型为:'resultset_type' => 'collection';
在项目开发中推荐设置数据集返回类型为:'resultset_type' => 'array';