Logo
Section 1 / 2

数据库定义

创建我们将用于初始化应用程序的 SQL 文件。

检查点

数据库定义

创建我们将用于初始化应用程序的 SQL 文件。

我们将创建三个 .sql 文件,位于 data 目录下:database.sql、structure.sql 和 content.sql。

让我们开始。

数据库模式

该应用程序的主要目的是跟踪我们在某个项目上花费的时间。每个项目包含多个任务。所有项目都将存储在一个名为 tracker 的关系型数据库中。本项目中使用的数据库管理系统是 MySQL。

在项目的根目录下,我们将创建一个名为 data/ 的新文件夹:

1mkdir data && cd data

然后,在新创建的文件夹中,我们创建以下 .sql 文件:

database.sql

1touch database.sql

此文件将负责创建我们的数据库并选择使用它。我们将在其中添加如下 SQL 代码:

1CREATE DATABASE IF NOT EXISTS tracker CHARACTER SET UTF8 COLLATE UTF8_UNICODE_CI; 2USE tracker;

我们将创建的数据库名称为 tracker。

structure.sql

1touch structure.sql

现在我们可以为数据库创建表了:

1DROP TABLE IF EXISTS tasks, projects; 2 3CREATE TABLE projects ( 4 id INT(11) AUTO_INCREMENT PRIMARY KEY, 5 title VARCHAR(100) NOT NULL, 6 category VARCHAR(100) NOT NULL 7); 8 9CREATE TABLE tasks ( 10 id INT(11) AUTO_INCREMENT PRIMARY KEY, 11 title VARCHAR(100) NOT NULL, 12 date_task DATE NOT NULL, 13 time_task INT(3) NOT NULL, 14 project_id INT(11) NOT NULL, 15 CONSTRAINT fk_tas_pro 16 FOREIGN KEY (project_id) 17 REFERENCES projects(id) 18 ON DELETE CASCADE 19);

注意: 上述脚本的作用是:如果这两个表已经存在,就先删除它们,然后再重新创建——tasks 表和 projects 表。每个表都有其属性,如 id 和 title。tasks 表依赖于 projects 表,我们将使用外键(foreign key)和引用约束(references constraint)将它们关联起来。

content.sql

1touch content.sql

现在我们可以向表中填充一些初始数据:

1INSERT INTO projects 2VALUES 3 (1, '学习 Laravel', '个人'), 4 (2, '学习 Reactjs', '个人'), 5 (3, '项目 3', '商业'); 6 7INSERT INTO tasks 8VALUES 9 (1, '任务 1', '2020-08-01', 25, 1), 10 (2, '任务 2', '2020-09-15', 45, 2), 11 (3, '任务 3', '2020-09-09', 25, 3);

我们的文件结构如下所示:

1|-- data 2| |-- content.sql 3| |-- database.sql 4| |-- structure.sql 5|-- index.php

执行 .sql 命令

现在,让我们在将其用于 PHP 之前,检查一下 SQL 脚本是否无误:

1DROP TABLE IF EXISTS tasks, projects; 2 3CREATE TABLE projects ( 4 id INT(11) AUTO_INCREMENT PRIMARY KEY, 5 title VARCHAR(100) NOT NULL, 6 category VARCHAR(100) NOT NULL 7); 8 9CREATE TABLE tasks ( 10 id INT(11) AUTO_INCREMENT PRIMARY KEY, 11 title VARCHAR(100) NOT NULL, 12 date_task DATE NOT NULL, 13 time_task INT(3) NOT NULL, 14 project_id INT(11) NOT NULL, 15 CONSTRAINT fk_tas_pro 16 FOREIGN KEY (project_id) 17 REFERENCES projects(id) 18 ON DELETE CASCADE 19); 20 21SHOW TABLES;
1.

Write a query that returns the rows from the table projects where the category = personal or business and the rows are sorted by title in descending order. The output should look like the following query.

0/500

测试你的 SQL 技能

Quiz

单选题

在 MySQL 中,我们使用哪条语句来选择一个数据库,以便在其上执行操作?

1 / 1

简介

使用 PDO 进行数据库连接