数据库定义
创建我们将用于初始化应用程序的 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;
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.
测试你的 SQL 技能
Quiz
在 MySQL 中,我们使用哪条语句来选择一个数据库,以便在其上执行操作?