ThinkPHP数据库学习日志5.15

来源:互联网 发布:网络错误代码1004 编辑:程序博客网 时间:2024/06/02 06:08

1.连接数据库

1.配置文件定义

表示数据库的连接器采用 \org\db\Mysql类作为数据库连接驱动,而不是默认的\think\db\connector\Mysql

每个模块可以设置独立的数据库连接参数,并且相同的配置参数可以无需重复设置,例如我们可以在admin模块的database.php配置文件中定义:

2.方法配置

调用Db类的时候动态定义连接信息

3.模型类定义

某个模型类里面定义了connection属性的话,则该模型操作的时候会自动连接给定的数据库连接,而不是配置文件中设置的默认连接信息,通常用于某些数据表位于当前数据库连接之外的其它数据库

2基本使用

配置了数据库连接信息后,我们就可以直接使用数据库运行原生SQL操作了,支持query(查询操作)和execute(写入操作)方法,并且支持参数绑定。

$config是一个单独的数据库配置,支持数组和字符串,也可以是一个数据库连接的配置参数名。

3.查询构造器

查询数据

添加数据

删除数据

更新数据

查询方法

查询语法

链式操作

聚合查询

时间查询

高级查询

视图查询

子查询

原生查询

4.查询事件

查询事件仅支持findselectinsertupdatedelete方法。

5.事务操作

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

使用 transaction 方法操作数据库事务,当发生异常会自动回滚

6.监听SQL

如果开启数据库的调试模式的话,你可以对数据库执行的任何SQL操作进行监听,使用如下方法:

7.存储过程

一个数据库存储过程sp_query,可以使用下面的方式调用:

$result = Db::query('call sp_query(8)');

返回的是一个二维数组,也可以使用参数绑定,例如:

$result = Db::query('call sp_query(?)',[8]);// 或者命名绑定$result = Db::query('call sp_query(:id)',['id'=>8]);

8.数据集

数据库的查询结果也就是数据集,默认的配置下,数据集的类型是一个二维数组,我们可以配置成数据集类,就可以支持对数据集更多的对象化操作,需要使用数据集类功能,可以配置数据库的resultset_type

返回的数据集对象是think\Collection,提供了和数组无差别用法,并且另外封装了一些额外的方法。

可以直接使用数组的方式操作数据集对象

如果要判断数据集是否为空,不能直接使用empty判断,而必须使用数据集对象的isEmpty方法判断

9.分布式数据库

ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离,但是分布式数据库必须是相同的数据库类型。

配置database.deploy 为1 可以采用分布式数据库支持。如果采用分布式数据库,定义数据库配置信息的方式如下:

连接的数据库个数取决于hostname定义的数量,所以即使是两个相同的IP也需要重复定义,但是其他的参数如果存在相同的可以不用重复定义

还可以设置分布式数据库的读写是否分离,默认的情况下读写不分离,也就是每台服务器都可以进行读写操作,对于主从式数据库而言,需要设置读写分离,通过下面的设置就可以:

    'rw_separate' => true,

在读写分离的情况下,默认第一个数据库配置是主服务器的配置信息,负责写入数据,如果设置了master_num参数,则可以支持多个主服务器写入。其它的都是从数据库的配置信息,负责读取数据,数量不限制。每次连接从服务器并且进行读取操作的时候,系统会随机进行在从服务器中选择。

还可以设置slave_no 指定某个服务器进行读操作。如果从数据库连接错误,会自动切换到主数据库连接。

调用模型的CURD操作的话,系统会自动判断当前执行的方法的读操作还是写操作,如果你用的是原生SQL,那么需要注意系统的默认规则:写操作必须用模型的execute方法,读操作必须用模型的query方法,否则会发生主从读写错乱的情况。


0 0
原创粉丝点击