• 12月2日:thinkphp中数据库完结


    数据库的查询

    聚合查询

    聚合查询的几种方法

    其中将count作为重点来说,由图所示,即为使用count()方法中需要注意的点

    count(*)的使用
    count()中字段名为具体值的使用方法

     时间查询

            官方文档中列举的是使用wheretime()进行查询的方法,但是在日常的项目开发中,时间通常是使用int类型进行存储时间戳的,所以很少会用到wheretime()方法

    高级查询

    https://static.kancloud.cn/manual/thinkphp5/135184

    视图查询

    官方文档:

            视图查询可以实现不依赖数据库视图的多表查询,并不需要数据库支持视图,例如:

    1. Db::view('User','id,name')
    2. ->view('Profile','truename,phone,email','Profile.user_id=User.id')
    3. ->view('Score','score','Score.user_id=Profile.id')
    4. ->where('score','>',80)
    5. ->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

    注意:视图查询无需调用tablejoin方法,并且在调用whereorder方法的时候只需要使用字段名而不需要加表名。

     日常项目中使用的视图查询

            MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。

     在mysql可视化工具中理好你想要的视图,他会自己生成sql语句

    1. SELECT
    2. `bro_demo`.`name` AS `name`,
    3. `bro_demo`.`id` AS `id`,
    4. `bro_score`.`user_id` AS `user_id`,
    5. `bro_score`.`username` AS `username`,
    6. `bro_score`.`score` AS `score`
    7. FROM
    8. (
    9. `bro_demo`
    10. JOIN `bro_score` ON (
    11. (
    12. (
    13. `bro_demo`.`id` = `bro_score`.`username`
    14. )
    15. AND (
    16. `bro_demo`.`name` = `bro_score`.`score`
    17. )
    18. )
    19. )
    20. )

    自我理解

    视图的优点

     视图的缺点

    在进行数据库迁移时i,会涉及到许多逻辑问题,必须得自己理清先创建哪个表,后创建哪个表,否则会报错

    别人写的视图及优缺点:MySQL视图及优缺点_徐凤年不是真无敌的博客-CSDN博客_mysql视图的优缺点

     事务操作(节选官方文档)

    事务的四大特性:原子性,一致性,隔离性,持久性

            使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 InnoDB 引擎。

    自动控制事务处理(很少使用)

    1. Db::transaction(function(){
    2. Db::name('user')->find(1);
    3. Db::name('user')->delete(1);
    4. });

    手动控制事务处理

    1. // 启动事务
    2. Db::startTrans();
    3. try{
    4. Db::name('user')->find(1);
    5. Db::name('user')->delete(1);
    6. // 提交事务
    7. Db::commit();
    8. } catch (\Exception $e) {
    9. // 回滚事务
    10. Db::rollback();
    11. }

      数据集

            官方文档中设置数据集返回类型为:'resultset_type' => 'collection';

            在项目开发中推荐设置数据集返回类型为:'resultset_type' => 'array';

  • 相关阅读:
    入门篇-其之六-附录一-以Java字节码的角度分析i++和++i
    疫情统计页面 H5 vue3+TypeScript+Echarts
    使用sklearn进行机器学习案例(1)
    一种有效的并行进化元启发法及其在三个优化问题中的应用
    红队打靶:THE PLANETS: MERCURY打靶思路详解(vulnhub)
    【ArcGIS微课1000例】0044:ArcGIS使用山体阴影显示DEM的3种方法
    Docker
    电气比例阀外接压力传感器和PID控制器实现微正压0.1%的超高精度控制
    【分布式锁篇】Redisson详解
    golang gorm —— 事务、回滚、savepoint
  • 原文地址:https://blog.csdn.net/qq_53457276/article/details/128149562