导读:使用 SQL 构建数据库比大多数人想象得要简单。实际上,你甚至不需要成为一个有经验的程序员就可以使用 SQL 创建数据库。在本文中,我将解释如何使用 MySQL 5.6 来创建简单的关系型数据库管理系统(RDMS)。

在开始之前,我想顺便感谢一下 SQL Fiddle,这是我用来运行脚本的工具。它提供了一个用于测试简单脚本的有用的沙箱。

在本教程中,我将构建一个使用如下实体关系图(ERD)中显示的简单架构的数据库。数据库列出了学生和正在学习的课程。为了保持简单,我使用了两个实体(即表),只有一种关系和依赖。这两个实体称为 dbo_students 和 dbo_courses

数据库的多样性是一对多的,因为每门课程可以包含很多学生,但每个学生只能学习一门课程。

关于术语的快速说明:

  • 一张表称为一个实体。

  • 一个字段称为一个属性。

  • 一条记录称为一个元组。

  • 用于构建数据库的脚本称为架构。

01 构建架构

要构建数据库,使用 CREATE TABLE <表名> 命令,然后定义每个字段的名称和数据类型。数据库使用 VARCHAR(n) (字符串)和 INT(n) (整数),其中 n 表示可以存储的值的长度。例如 INT(2) 可以是 01

这是用于创建两个表的代码:

CREATE TABLE dbo_students
(
  student_id INT(2) AUTO_INCREMENT NOT NULL,
  student_name VARCHAR(50),
  course_studied INT(2),
  PRIMARY KEY (student_id)
);

CREATE TABLE dbo_courses
(
  course_id INT(2) AUTO_INCREMENT NOT NULL,
  course_name VARCHAR(30),
  PRIMARY KEY (course_id)
);

NOT NULL 意味着字段不能为空,AUTO_INCREMENT 意味着当一个新的元组被添加时,ID 号将自动生成,是对先前存储的 ID 号加 1,以强化各实体之间的完整参照性。 PRIMARY KEY 是每个表的惟一标识符属性。这意味着每个元组都有自己的不同的标识。

02 关系作为一种约束

就目前来看,这两张表格是独立存在的,没有任何联系或关系。要连接它们,必须标识一个外键。在 dbo_students 中,外键是 course_studied,其来源在 dbo_courses中,意味着该字段被引用。SQL 中的特定命令为 CONSTRAINT,并且将使用另一个名为 ALTER TABLE 的命令添加这种关系,这样即使在架构构建完毕后,也可以编辑表。

以下代码将关系添加到数据库构造脚本中:

ALTER TABLE dbo_students
ADD CONSTRAINT FK_course_studied
FOREIGN KEY (course_studied) REFERENCES dbo_courses(course_id);

使用 CONSTRAINT 命令实际上并不是必要的,但这是一个好习惯,因为它意味着约束可以被命名并且使维护更容易。现在数据库已经完成了,是时候添加一些数据了。

03 将数据添加到数据库

INSERT INTO <表名> 是用于直接选择要添加哪些属性(即字段)数据的命令。首先声明实体名称,然后声明属性,下边是添加到实体的数据,从而创建一个元组。如果指定了 NOT NULL,这表示该属性不能留空。以下代码将展示如何向表中添加记录:

INSERT INTO dbo_courses(course_id,course_name)
VALUES(001,'Software Engineering');
INSERT INTO dbo_courses(course_id,course_name)
VALUES(002,'Computer Science');
INSERT INTO dbo_courses(course_id,course_name)
VALUES(003,'Computing');

INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(001,'student1',001);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(002,'student2',002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(003,'student3',002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(004,'student4',003);

现在数据库架构已经完成并添加了数据,现在是时候在数据库上运行查询了。

04 查询

查询遵循使用以下命令的集合结构:

SELECT <attributes>
FROM <entity>
WHERE <condition>

要显示 dbo_courses 实体内的所有记录并显示课程代码和课程名称,请使用 * 。这是一个通配符,它消除了键入所有属性名称的需要。(在生产数据库中不建议使用它。)此处查询的代码是:

SELECT *
FROM dbo_courses

此处查询的输出显示表中的所有元组,因此可显示所有可用课程:

| course_id |          course_name |
|-----------|----------------------|
|         1 | Software Engineering |
|         2 |     Computer Science |
|         3 |            Computing |

在后面的文章中,我将使用三种类型的连接之一来解释更复杂的查询:内连接、外连接和交叉连接。

这是完整的脚本:

CREATE TABLE dbo_students
(
  student_id INT(2) AUTO_INCREMENT NOT NULL,
  student_name VARCHAR(50),
  course_studied INT(2),
  PRIMARY KEY (student_id)
);

CREATE TABLE dbo_courses
(
  course_id INT(2) AUTO_INCREMENT NOT NULL,
  course_name VARCHAR(30),
  PRIMARY KEY (course_id)
);

ALTER TABLE dbo_students
ADD CONSTRAINT FK_course_studied
FOREIGN KEY (course_studied) REFERENCES dbo_courses(course_id);

INSERT INTO dbo_courses(course_id,course_name)
VALUES(001,'Software Engineering');
INSERT INTO dbo_courses(course_id,course_name)
VALUES(002,'Computer Science');
INSERT INTO dbo_courses(course_id,course_name)
VALUES(003,'Computing');

INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(001,'student1',001);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(002,'student2',002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(003,'student3',002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(004,'student4',003);

SELECT *
FROM dbo_courses

05 学习更多

SQL 并不困难;我认为它比编程简单,并且该语言对于不同的数据库系统是通用的。 请注意,实体关系图中 dbo.<实体> (LCTT 译注:文章中使用的是 dbo_<实体>)不是必需的实体命名约定;我之所以使用,仅仅是因为它是 Microsoft SQL Server 中的标准。

如果你想了解更多,在网络上这方面的最佳指南是 W3Schools.com 中对所有数据库平台的 SQL 综合指南。请随意使用我的数据库。

作者:Aaron Cocker

译者:MjSeven

来源:Linux中国(ID:linux-cn)

原文:https://opensource.com/article/18/2/getting-started-sql

推荐阅读

日本老爷爷坚持17年用Excel作画,我可能用了假的Excel···

看完此文再不懂区块链算我输:手把手教你用Python从零开始创建区块链

为什么要学数学?因为这是一场战略性的投资

180页PPT,讲解人工智能技术与产业发展

Q: SQL你玩得666吗?

欢迎留言与大家分享

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:baiyu@hzbook.com

更多精彩文章,请在公众号后台点击“历史文章”查看

入门 | 使用 SQL 构建一个关系数据库比你想的更容易相关推荐

  1. 【Yocto学习入门】02 - 构建一个简单的Poky参考嵌入式操作系统

    [Yocto学习入门]02 - 构建一个简单的Poky参考嵌入式操作系统 一.开发环境准备 二.下载 Poky 代码 三.配置编译环境 3.1 下载失败情况处理 Failed to fetch URL ...

  2. Games104现代游戏引擎入门-lecture3如何构建一个游戏世界

    Games104现代游戏引擎入门-lecture3如何构建一个游戏世界 1 游戏世界的构成 2 无人机案例 3 游戏世界如何动起来 4 如何探索 5 如何管理GO 6 总结 7 Q&A 1 游 ...

  3. jenkins插件更换源_jenkins快速入门,自动构建一个hello world项目(devops,ci/cd)

    jenkins是一个非常老牌的ci/cd工具,它是一款使用Java写的开源自动化应用.可以通过界面或Jenkinsfile告诉它执行什么任务,何时执行,理论上,可以让它执行任何事,一般用来做ci/cd ...

  4. 【区块链新手快速入门】如何构建一个区块链

    本文翻译自<Learn Blockchains by Building One>,作者@dvf,原文链接:https://hackernoon.com/learn-blockchains- ...

  5. Demo:基于 Flink SQL 构建流式应用

    摘要:上周四在 Flink 中文社区钉钉群中直播分享了<Demo:基于 Flink SQL 构建流式应用>,直播内容偏向实战演示.这篇文章是对直播内容的一个总结,并且改善了部分内容,比如除 ...

  6. 快速入门PyTorch(2)--如何构建一个神经网络

    2019 第 43 篇,总第 67 篇文章 本文大约 4600 字,阅读大约需要 10 分钟 快速入门 PyTorch 教程第二篇,这篇介绍如何构建一个神经网络.上一篇文章: 快速入门Pytorch( ...

  7. 机器学习入门系列(2)--如何构建一个完整的机器学习项目(一)

    上一篇机器学习入门系列(1)–机器学习概览简单介绍了机器学习的一些基本概念,包括定义.优缺点.机器学习任务的划分等等. 接下来计划通过几篇文章来介绍下,一个完整的机器学习项目的实现步骤会分为几步,最后 ...

  8. [carla入门教程]-6 小项目:基于carla-ros-bridge构建一个小型比赛赛道

    本专栏教程将记录从安装carla到调用carla的pythonAPI进行车辆操控并采集数据的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制. 第 ...

  9. Android基础入门教程——2.4.7 构建一个可复用的自定义BaseAdapter

    Android基础入门教程--2.4.7 构建一个可复用的自定义BaseAdapter 标签(空格分隔): Android基础入门教程 本节引言: 如题,本节给大家带来的是构建一个可复用的自定义Bas ...

最新文章

  1. MySQL数据库-理论基础
  2. 【7.2】__getattr__、__getattribute__魔法函数
  3. XP共享访问无权限解决方法
  4. the server did not provide any additional information
  5. Java 中,类、类对象、泛型之间的转换
  6. 字符编码看不懂你来打我!(ASCII,Unicode,Utf-8,GB2312…)
  7. C#中Thread.sleep()
  8. 集合和Iterator迭代器
  9. 软件项目管理的基本概念
  10. jeDate日期控件
  11. eclipse 快捷调整字体_eclipse字体大小设置快捷键
  12. python的空语句_Python 函数返回空值
  13. 自我提升第n天,自媒体必备工具大全
  14. oracle临时表的创建
  15. C语言micstring函数,micSendString函数使用方法
  16. golang快速入门[3]-go语言helloworld
  17. Poisoning the Unlabeled Dataset of Semi-Supervised Learning毒害半监督学习的无标记数据集
  18. 如何为您的PHP应用程序创建Slack接口
  19. 网络基础之虚拟路由器冗余协议(VRRP)理论基础及华为ENSP基础配置
  20. Linux管道命令(pipe)

热门文章

  1. 6.3.2线索二叉树
  2. c语言设计匀速直线运动,C语言课程设计指导书2015版(试用版)201506.doc
  3. netcore 编译 html dll,ASP.NET Core Razor 视图预编译、动态编译
  4. c语言中小数在内存中的存储,c语言中小数在内存中的存储
  5. $ajax 筛选某个属性,jQuery
  6. 蛋白粉有什么作用?搭配这些食物帮助提升免疫力!
  7. AVB Digest转换成ASCII码
  8. u盘启动pxe安装linux,U盘启动安装centos5.5+centos6.3+PXE网络安装CentOS
  9. 操作系统之进程管理:17、死锁
  10. 计算机网络之传输层:5、TCP可靠传输