使用 SQL 构建数据库比大多数人想象的要简单。 事实上,您甚至不需要成为经验丰富的程序员就可以使用 SQL 创建数据库。 在本文中,我将解释如何使用 MySQL 5.6 创建一个简单的关系数据库管理系统 (RDMS)。 在我开始之前,我想快速感谢 SQL Fiddle,我用它来运行我的脚本。 它为测试简单脚本提供了一个有用的沙箱。
在本教程中,我将构建一个数据库,该数据库使用下面实体关系图 (ERD) 中显示的简单模式。 该数据库列出了学生以及每人正在学习的课程。 为了简单起见,我使用了两个实体(即表),只有一个关系和依赖关系。 这些实体名为 dbo_students
和 dbo_courses
。

opensource.com
数据库的多重性是一对多,因为每门课程可以包含许多学生,但每个学生只能学习一门课程。
关于术语的简要说明
- 表称为实体。
- 字段称为属性。
- 记录称为元组。
- 用于构建数据库的脚本称为模式。
构建模式
要构建数据库,请使用 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
是每个表的唯一标识符属性。 这意味着每个元组都有其自己独特的标识。
作为约束的关系
就目前而言,这两个表各自独立存在,没有连接或关系。 要连接它们,必须标识外键。 在 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
命令实际上不是必需的,但这是一个很好的做法,因为它意味着可以命名约束,并且使维护更容易。 现在数据库已完成,是时候添加一些数据了。
向数据库添加数据
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);
现在数据库模式已完成并且已添加数据,是时候在数据库上运行查询了。
查询
查询遵循使用这些命令的设定结构
SELECT <attributes>
FROM <entity>
WHERE <condition>
要显示 dbo_courses
实体中的所有记录并显示课程代码和课程名称,请使用星号。 这是一个通配符,无需键入所有属性名称。(不建议在生产数据库中使用它。)此查询的代码是
SELECT *
FROM dbo_courses
此查询的输出显示表中的所有元组,因此可以显示所有可用的课程
| course_id | course_name |
|-----------|----------------------|
| 1 | Software Engineering |
| 2 | Computer Science |
| 3 | Computing |
在以后的文章中,我将解释更复杂的查询,使用三种连接类型之一:Inner、Outer 或 Cross。
这是完整的脚本
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
了解更多
SQL 并不难; 我认为它比编程更简单,并且该语言对于不同的数据库系统是通用的。 请注意,dbo.<实体>
不是必需的实体命名约定; 我使用它仅仅是因为它是 Microsoft SQL Server 中的标准。
如果您想了解更多信息,互联网上最好的指南是 W3Schools.com 针对所有数据库平台的综合 SQL 指南。
请随意试用我的数据库。 此外,如果您有任何建议或问题,请在评论中回复。
1 条评论