ThinkPHP 配置数据库
1. 前言
本小节介绍如何设计数据表,合理地选择数据字段,建立好数据表之后,就可以在 ThinkPHP
中的配置文件填写相应的数据库信息。
若 php
使用传统的方式去连接数据库一般步骤会比较繁琐,如使用 mysqli
去连接 mysql
就需要进行一系列复杂的代码操作,这样对初学者来说不是很友好。所以 ThinkPHP
框架对这一系列的数据库连接和执行操作进行了封装,使用 ThinkPHP
框架提供的这些方法基本能满足大多数数据库 增删改查
操作,和其他一些比较常见的数据库操作 。
2. 新建数据库和数据表
这里学习下如何设计学生课程相关数据表,其中包括学生信息 student,教师信息表 teacher,学科表 course,学生选课表 student_course,合理选择字段类型。接下来可以新建一个属于自己项目的数据库:
命令 : CREATE DATABASE item_name;
执行命令如图所示:
3. 新建学生信息表 student
3.1 确定字段
字段名称 | 含义 |
---|---|
id | 自增主键 |
name | 学生姓名 |
age | 学生年龄 |
id_number | 身份证号 |
created_at | 创建数据时的时间戳 |
update_at | 更新数据时的时间戳 |
status | 状态 1-正常 2-删除 |
学生信息表包含的字段可以有很多,本小节选择学生姓名、年龄、身份证号介绍字段的选择,字段的确定是根据实际业务需求来新增或减少的,例如想要存储学生籍贯信息可新增 “address” 字段。
3.2 选择字段的数据类型
字段名称 | 数据类型 |
---|---|
id | 无符号整型(UNSIGNED INT) |
name | VARCHAR(50) |
age | UNSIGNED INT |
id_number | VARCHAR(18) |
created_at | INT(10) |
update_at | INT(10) |
status | TINYINT(1) |
Tips:实际业务中一般要将年龄字段设置为可变,通常会使用时间戳(距离1970-01-01 00:00:00的秒数)来表示年龄相关的信息,在这里为了方便演示直接使用了 UNSIGNED INT。
一般来说姓名字段的长度为 2-4 个字符,但是考虑到少数民族的学生姓名比较长,所以将姓名字段的长度设置为 50,适当的给的大一点。身份证号同样使用字符串类型来存储,因为有的身份证号中有字母。身份证的长度统一都是 18 位不变,直接在这里写死就好。
3.3 新建数据表
命令 :
CREATE TABLE `student` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '无名',
`age` int(10) unsigned NOT NULL DEFAULT '0',
`id_number` varchar(18) NOT NULL DEFAULT '',
`created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
`status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1-正常 2-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Tips:其中 “student” 为表名称,“id”、“name”、“age”、“id_number” 为字段名称,跟在字段名称后面的是字段的数据类型,“UNSIGNED” 表示无符号,“AUTO_INCREMENT” 表示自增,"PRIMARY KEY (`id`)"表示设置 “id” 为业务主键,,"NOT NULL DEFAULT ‘无名’ " 表示默认不为空,且默认值为 “无名” 。
执行结果如下图:
查看当前数据库中所有的数据表:
命令:show tables
可以看到 item_name 数据库中已经有了 student 这张数据表。
4. 新建教师信息表 teacher
4.1 确定字段
字段名称 | 含义 |
---|---|
id | 自增主键 |
name | 教师姓名 |
age | 教师年龄 |
id_number | 身份证号 |
created_at | 创建数据时的时间戳 |
update_at | 更新数据时的时间戳 |
status | 状态 1-正常 2-删除 |
同样教师信息的字段可选择也很多,这里选择教师姓名、教师年龄、教师身份证号,可自行选择感兴趣的字段,并参照新建学生表的步骤选择字段,如教师邮箱、教师博客地址。
4.2 选择字段的数据类型
字段名称 | 数据类型 |
---|---|
id | 无符号整型(UNSIGNED INT) |
name | VARCHAR(50) |
age | UNSIGNED INT |
id_number | VARCHAR(18) |
created_at | INT(10) |
update_at | INT(10) |
status | TINYINT(1) |
4.3 新建数据表
命令 :
CREATE TABLE `teacher` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '教师名',
`age` int(10) unsigned NOT NULL DEFAULT '0',
`id_number` varchar(18) NOT NULL DEFAULT '',
`created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
`status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1-正常 2-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Tips: 其中 “teacher” 为表名称,“id”、“name”、“age”、“id_number” 为字段名称,跟在字段名称后面的是字段的数据类型,“UNSIGNED” 表示无符号,“AUTO_INCREMENT” 表示自增,“PRIMARY KEY (`id`)” 表示设置 “id” 为业务主键,"NOT NULL DEFAULT 教师名’ "表示默认不为空,且默认值为 “教师名” 。
执行结果如下图:
Tips: 这里展示了使用 Navicat 来执行 sql 语句,选择数据库只需点击相应的数据库名称,然后选择新建查询即可。
5. 新建课程表 course
5.1 确定字段
字段名称 | 含义 |
---|---|
id | 自增主键 |
course_name | 课程名称 |
teacher_id | 教师id |
created_at | 创建数据时的时间戳 |
update_at | 更新数据时的时间戳 |
status | 状态 1-正常 2-删除 |
5.2 选择字段的数据类型
字段名称 | 数据类型 |
---|---|
id | 无符号整型(UNSIGNED INT) |
course_name | VARCHAR(50) |
teacher_id | 无符号整型(UNSIGNED INT) |
created_at | INT(10) |
update_at | INT(10) |
status | TINYINT(1) |
5.3 新建数据表
命令 :
CREATE TABLE `course` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`course_name` varchar(50) NOT NULL DEFAULT '',
`teacher_id` int(10) unsigned NOT NULL DEFAULT '0',
`created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
`status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1-正常 2-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
执行结果如下图:
6. 新建学生选课关联表 student_course
6.1 确定字段
字段名称 | 含义 |
---|---|
id | 自增主键 |
student_id | 学生id |
course_id | 课程id |
created_at | INT(10) |
6.2 选择字段的数据类型
字段名称 | 数据类型 |
---|---|
id | 无符号整型(UNSIGNED INT) |
student_id | 无符号整型(UNSIGNED INT) |
course_id | 无符号整型(UNSIGNED INT) |
created_at | INT(10) |
6.3 新建数据表
命令 :
CREATE TABLE `student_course` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`student_id` int(10) unsigned NOT NULL DEFAULT '0',
`course_id` int(10) unsigned NOT NULL DEFAULT '0',
`created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
执行结果如下图:
7. 配置数据库信息
下面打开 config\database.php
文件,可以看到文件内容:
<?php
return [
// 默认使用的数据库连接配置
'default' => env('database.driver', 'mysql'),
// 自定义时间查询规则
'time_query_rule' => [],
// 自动写入时间戳字段
// true为自动识别类型 false关闭
// 字符串则明确指定时间字段类型 支持 int timestamp datetime date
'auto_timestamp' => true,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 数据库连接配置信息
'connections' => [
'mysql' => [
// 数据库类型
'type' => env('database.type', 'mysql'),
// 服务器地址
'hostname' => env('database.hostname', '127.0.0.1'),
// 数据库名
'database' => env('database.database', ''),
// 用户名
'username' => env('database.username', 'root'),
// 密码
'password' => env('database.password', ''),
// 端口
'hostport' => env('database.hostport', '3306'),
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => env('database.charset', 'utf8'),
// 数据库表前缀
'prefix' => env('database.prefix', ''),
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 是否需要断线重连
'break_reconnect' => false,
// 监听SQL
'trigger_sql' => env('app_debug', true),
// 开启字段缓存
'fields_cache' => false,
],
// 更多的数据库配置信息
],
];
上面是一些数据库的配置,主要的参数配置都会读取 .env
文件,配置下面的数据库参数:
8. 小结
本小节介绍了相关数据库表的设计,对表中没一个字段的定义过程进行了说明,新建好数据库后就可以在 config\database.php
文件中配置全局数据库连接配置,需要注意的是,也可以配置属于自己模块的配置,该模块单独连接另外数据库,配置连接好数据库之后就能对数据库进行增删改查操作了。
Tips: 代码仓库:https://gitee.com/love-for-poetry/tp6