ThinkPHP 配置數(shù)據(jù)庫(kù)
1. 前言
本小節(jié)介紹如何設(shè)計(jì)數(shù)據(jù)表,合理地選擇數(shù)據(jù)字段,建立好數(shù)據(jù)表之后,就可以在 ThinkPHP
中的配置文件填寫(xiě)相應(yīng)的數(shù)據(jù)庫(kù)信息。
若 php
使用傳統(tǒng)的方式去連接數(shù)據(jù)庫(kù)一般步驟會(huì)比較繁瑣,如使用 mysqli
去連接 mysql
就需要進(jìn)行一系列復(fù)雜的代碼操作,這樣對(duì)初學(xué)者來(lái)說(shuō)不是很友好。所以 ThinkPHP
框架對(duì)這一系列的數(shù)據(jù)庫(kù)連接和執(zhí)行操作進(jìn)行了封裝,使用 ThinkPHP
框架提供的這些方法基本能滿足大多數(shù)數(shù)據(jù)庫(kù) 增刪改查
操作,和其他一些比較常見(jiàn)的數(shù)據(jù)庫(kù)操作 。
2. 新建數(shù)據(jù)庫(kù)和數(shù)據(jù)表
這里學(xué)習(xí)下如何設(shè)計(jì)學(xué)生課程相關(guān)數(shù)據(jù)表,其中包括學(xué)生信息 student,教師信息表 teacher,學(xué)科表 course,學(xué)生選課表 student_course,合理選擇字段類(lèi)型。接下來(lái)可以新建一個(gè)屬于自己項(xiàng)目的數(shù)據(jù)庫(kù):
命令 : CREATE DATABASE item_name;
執(zhí)行命令如圖所示:
3. 新建學(xué)生信息表 student
3.1 確定字段
字段名稱 | 含義 |
---|---|
id | 自增主鍵 |
name | 學(xué)生姓名 |
age | 學(xué)生年齡 |
id_number | 身份證號(hào) |
created_at | 創(chuàng)建數(shù)據(jù)時(shí)的時(shí)間戳 |
update_at | 更新數(shù)據(jù)時(shí)的時(shí)間戳 |
status | 狀態(tài) 1-正常 2-刪除 |
學(xué)生信息表包含的字段可以有很多,本小節(jié)選擇學(xué)生姓名、年齡、身份證號(hào)介紹字段的選擇,字段的確定是根據(jù)實(shí)際業(yè)務(wù)需求來(lái)新增或減少的,例如想要存儲(chǔ)學(xué)生籍貫信息可新增 “address” 字段。
3.2 選擇字段的數(shù)據(jù)類(lèi)型
字段名稱 | 數(shù)據(jù)類(lèi)型 |
---|---|
id | 無(wú)符號(hào)整型(UNSIGNED INT) |
name | VARCHAR(50) |
age | UNSIGNED INT |
id_number | VARCHAR(18) |
created_at | INT(10) |
update_at | INT(10) |
status | TINYINT(1) |
Tips:實(shí)際業(yè)務(wù)中一般要將年齡字段設(shè)置為可變,通常會(huì)使用時(shí)間戳(距離1970-01-01 00:00:00的秒數(shù))來(lái)表示年齡相關(guān)的信息,在這里為了方便演示直接使用了 UNSIGNED INT。
一般來(lái)說(shuō)姓名字段的長(zhǎng)度為 2-4 個(gè)字符,但是考慮到少數(shù)民族的學(xué)生姓名比較長(zhǎng),所以將姓名字段的長(zhǎng)度設(shè)置為 50,適當(dāng)?shù)慕o的大一點(diǎn)。身份證號(hào)同樣使用字符串類(lèi)型來(lái)存儲(chǔ),因?yàn)橛械纳矸葑C號(hào)中有字母。身份證的長(zhǎng)度統(tǒng)一都是 18 位不變,直接在這里寫(xiě)死就好。
3.3 新建數(shù)據(jù)表
命令 :
CREATE TABLE `student` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '無(wú)名',
`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 '創(chuàng)建時(shí)間',
`update_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新時(shí)間',
`status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '狀態(tài) 1-正常 2-刪除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Tips:其中 “student” 為表名稱,“id”、“name”、“age”、“id_number” 為字段名稱,跟在字段名稱后面的是字段的數(shù)據(jù)類(lèi)型,“UNSIGNED” 表示無(wú)符號(hào),“AUTO_INCREMENT” 表示自增,"PRIMARY KEY (`id`)"表示設(shè)置 “id” 為業(yè)務(wù)主鍵,,"NOT NULL DEFAULT ‘無(wú)名’ " 表示默認(rèn)不為空,且默認(rèn)值為 “無(wú)名” 。
執(zhí)行結(jié)果如下圖:
查看當(dāng)前數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)表:
命令:show tables
可以看到 item_name 數(shù)據(jù)庫(kù)中已經(jīng)有了 student 這張數(shù)據(jù)表。
4. 新建教師信息表 teacher
4.1 確定字段
字段名稱 | 含義 |
---|---|
id | 自增主鍵 |
name | 教師姓名 |
age | 教師年齡 |
id_number | 身份證號(hào) |
created_at | 創(chuàng)建數(shù)據(jù)時(shí)的時(shí)間戳 |
update_at | 更新數(shù)據(jù)時(shí)的時(shí)間戳 |
status | 狀態(tài) 1-正常 2-刪除 |
同樣教師信息的字段可選擇也很多,這里選擇教師姓名、教師年齡、教師身份證號(hào),可自行選擇感興趣的字段,并參照新建學(xué)生表的步驟選擇字段,如教師郵箱、教師博客地址。
4.2 選擇字段的數(shù)據(jù)類(lèi)型
字段名稱 | 數(shù)據(jù)類(lèi)型 |
---|---|
id | 無(wú)符號(hào)整型(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 新建數(shù)據(jù)表
命令 :
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 '創(chuàng)建時(shí)間',
`update_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新時(shí)間',
`status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '狀態(tài) 1-正常 2-刪除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Tips: 其中 “teacher” 為表名稱,“id”、“name”、“age”、“id_number” 為字段名稱,跟在字段名稱后面的是字段的數(shù)據(jù)類(lèi)型,“UNSIGNED” 表示無(wú)符號(hào),“AUTO_INCREMENT” 表示自增,“PRIMARY KEY (`id`)” 表示設(shè)置 “id” 為業(yè)務(wù)主鍵,"NOT NULL DEFAULT 教師名’ "表示默認(rèn)不為空,且默認(rèn)值為 “教師名” 。
執(zhí)行結(jié)果如下圖:
Tips: 這里展示了使用 Navicat 來(lái)執(zhí)行 sql 語(yǔ)句,選擇數(shù)據(jù)庫(kù)只需點(diǎn)擊相應(yīng)的數(shù)據(jù)庫(kù)名稱,然后選擇新建查詢即可。
5. 新建課程表 course
5.1 確定字段
字段名稱 | 含義 |
---|---|
id | 自增主鍵 |
course_name | 課程名稱 |
teacher_id | 教師id |
created_at | 創(chuàng)建數(shù)據(jù)時(shí)的時(shí)間戳 |
update_at | 更新數(shù)據(jù)時(shí)的時(shí)間戳 |
status | 狀態(tài) 1-正常 2-刪除 |
5.2 選擇字段的數(shù)據(jù)類(lèi)型
字段名稱 | 數(shù)據(jù)類(lèi)型 |
---|---|
id | 無(wú)符號(hào)整型(UNSIGNED INT) |
course_name | VARCHAR(50) |
teacher_id | 無(wú)符號(hào)整型(UNSIGNED INT) |
created_at | INT(10) |
update_at | INT(10) |
status | TINYINT(1) |
5.3 新建數(shù)據(jù)表
命令 :
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 '創(chuàng)建時(shí)間',
`update_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新時(shí)間',
`status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '狀態(tài) 1-正常 2-刪除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
執(zhí)行結(jié)果如下圖:
6. 新建學(xué)生選課關(guān)聯(lián)表 student_course
6.1 確定字段
字段名稱 | 含義 |
---|---|
id | 自增主鍵 |
student_id | 學(xué)生id |
course_id | 課程id |
created_at | INT(10) |
6.2 選擇字段的數(shù)據(jù)類(lèi)型
字段名稱 | 數(shù)據(jù)類(lèi)型 |
---|---|
id | 無(wú)符號(hào)整型(UNSIGNED INT) |
student_id | 無(wú)符號(hào)整型(UNSIGNED INT) |
course_id | 無(wú)符號(hào)整型(UNSIGNED INT) |
created_at | INT(10) |
6.3 新建數(shù)據(jù)表
命令 :
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 '創(chuàng)建時(shí)間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
執(zhí)行結(jié)果如下圖:
7. 配置數(shù)據(jù)庫(kù)信息
下面打開(kāi) config\database.php
文件,可以看到文件內(nèi)容:
<?php
return [
// 默認(rèn)使用的數(shù)據(jù)庫(kù)連接配置
'default' => env('database.driver', 'mysql'),
// 自定義時(shí)間查詢規(guī)則
'time_query_rule' => [],
// 自動(dòng)寫(xiě)入時(shí)間戳字段
// true為自動(dòng)識(shí)別類(lèi)型 false關(guān)閉
// 字符串則明確指定時(shí)間字段類(lèi)型 支持 int timestamp datetime date
'auto_timestamp' => true,
// 時(shí)間字段取出后的默認(rèn)時(shí)間格式
'datetime_format' => 'Y-m-d H:i:s',
// 數(shù)據(jù)庫(kù)連接配置信息
'connections' => [
'mysql' => [
// 數(shù)據(jù)庫(kù)類(lèi)型
'type' => env('database.type', 'mysql'),
// 服務(wù)器地址
'hostname' => env('database.hostname', '127.0.0.1'),
// 數(shù)據(jù)庫(kù)名
'database' => env('database.database', ''),
// 用戶名
'username' => env('database.username', 'root'),
// 密碼
'password' => env('database.password', ''),
// 端口
'hostport' => env('database.hostport', '3306'),
// 數(shù)據(jù)庫(kù)連接參數(shù)
'params' => [],
// 數(shù)據(jù)庫(kù)編碼默認(rèn)采用utf8
'charset' => env('database.charset', 'utf8'),
// 數(shù)據(jù)庫(kù)表前綴
'prefix' => env('database.prefix', ''),
// 數(shù)據(jù)庫(kù)部署方式:0 集中式(單一服務(wù)器),1 分布式(主從服務(wù)器)
'deploy' => 0,
// 數(shù)據(jù)庫(kù)讀寫(xiě)是否分離 主從式有效
'rw_separate' => false,
// 讀寫(xiě)分離后 主服務(wù)器數(shù)量
'master_num' => 1,
// 指定從服務(wù)器序號(hào)
'slave_no' => '',
// 是否嚴(yán)格檢查字段是否存在
'fields_strict' => true,
// 是否需要斷線重連
'break_reconnect' => false,
// 監(jiān)聽(tīng)SQL
'trigger_sql' => env('app_debug', true),
// 開(kāi)啟字段緩存
'fields_cache' => false,
],
// 更多的數(shù)據(jù)庫(kù)配置信息
],
];
上面是一些數(shù)據(jù)庫(kù)的配置,主要的參數(shù)配置都會(huì)讀取 .env
文件,配置下面的數(shù)據(jù)庫(kù)參數(shù):
8. 小結(jié)
本小節(jié)介紹了相關(guān)數(shù)據(jù)庫(kù)表的設(shè)計(jì),對(duì)表中沒(méi)一個(gè)字段的定義過(guò)程進(jìn)行了說(shuō)明,新建好數(shù)據(jù)庫(kù)后就可以在 config\database.php
文件中配置全局?jǐn)?shù)據(jù)庫(kù)連接配置,需要注意的是,也可以配置屬于自己模塊的配置,該模塊單獨(dú)連接另外數(shù)據(jù)庫(kù),配置連接好數(shù)據(jù)庫(kù)之后就能對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查操作了。
Tips: 代碼倉(cāng)庫(kù):https://gitee.com/love-for-poetry/tp6