# MySQL 简介

> 原文： [http://zetcode.com/databases/mysqltutorial/introduction/](http://zetcode.com/databases/mysqltutorial/introduction/)

这是 MySQL 教程。 它涵盖 MySQL 数据库，各种 mysql 命令行工具以及数据库引擎涵盖的 SQL 语言。 它是初学者的入门教程。

## MySQL 数据库

MySQL 是领先的开源数据库管理系统。 它是一个多用户，多线程的数据库管理系统。 MySQL 在网络上特别流行。 它是非常流行的 LAMP 平台的组成部分之一。 Linux，Apache，MySQL 和 PHP。 MySQL 数据库在最重要的 OS 平台上可用。 它可以在 BSD Unix，Linux，Windows 或 Mac 上运行。 维基百科，YouTube，Facebook 使用 MySQL。 这些站点每天管理数百万个查询。 MySQL 有两个版本：MySQL 服务器系统和 MySQL 嵌入式系统。 MySQL 服务器软件和客户端库具有双重许可：GPL 版本 2 和专有许可。

MySQL 的开发始于 1994 年，瑞典的 MySQL AB 公司。 Sun Microsystems 在 2008 年收购了 MySQLAB。Sun 在 2010 年被 Oracle 收购。

MySQL，PostgreSQL，Firebird，SQLite，Derby 和 HSQLDB 是最著名的开源数据库系统。

MySQL 是用 C/C++ 开发的。 除 C/C++ 外，还存在适用于 PHP，Python，Java，C# ，Eiffel，Ruby，Tcl 或 Perl 的 API。

## MariaDB

MariaDB 是 MySQL 的社区开发分支，旨在在 GNU GPL 下保持免费。 它是由 MySQL 的原始开发人员领导的，由于担心它被 Oracle 收购，他们分叉了它。 MariaDB 打算保持与 MySQL 的高度兼容性，以库二进制等效性和与 MySQL API 和命令的精确匹配来确保“嵌入式”替换功能。

## 定义

关系数据库是表中组织的数据的集合。 表之间存在关系。 这些表是正式描述的。 它们由行和列组成。 SQL（结构化查询语言）是一种数据库计算机语言，旨在管理关系数据库管理系统中的数据。 表是使用垂直列和水平行的模型组织的一组值。 列由其名称标识。 数据库系统的模式是用正式语言描述的结构。 它定义了表，字段，关系，视图，索引，过程，函数，队列，触发器和其他元素。

数据库的行代表表中的单个隐式结构化数据项。 它也称为元组或记录。 列是一组特定简单类型的数据值，该数据值对应于表的每一行。 列提供了构成行所依据的结构。 字段是单个项目，存在于一行和一列之间的交点处。 主键唯一标识表中的每个记录。 外键是两个表之间的引用约束。 外键标识一个（引用）表中的一列或一组列，该列或表引用另一（引用）表中的一列或一组列。

触发器是响应于数据库中特定表上的某些事件而自动执行的过程代码。 视图是对来自一个或多个表的数据的特定外观。 它可以按特定顺序排列数据，突出显示或隐藏某些数据。 视图由存储的查询组成，该查询可作为由查询结果集组成的虚拟表访问。 与普通表不同，视图不构成物理模式的一部分。 它是根据数据库中的数据计算或整理的动态虚拟表。

事务是针对一个或多个数据库中数据的数据库操作的基本单位。 事务中所有 SQL 语句的影响可以全部提交给数据库，也可以全部回滚。 SQL 结果集是数据库中由`SELECT`语句返回的一组行。 它还包含有关查询的元信息，例如列名以及每列的类型和大小。 索引是一种数据结构，可提高对数据库表的数据检索操作的速度。

## 使用的表

在这里，我们将列出整个教程中使用的所有表。

`cars.sql`

```sql
-- SQL for the Cars table

USE mydb;
CREATE TABLE IF NOT EXISTS Cars(Id INTEGER PRIMARY KEY, Name VARCHAR(50), 
Cost INTEGER);
INSERT INTO Cars VALUES(1,'Audi',52642);
INSERT INTO Cars VALUES(2,'Mercedes',57127);
INSERT INTO Cars VALUES(3,'Skoda',9000);
INSERT INTO Cars VALUES(4,'Volvo',29000);
INSERT INTO Cars VALUES(5,'Bentley',350000);
INSERT INTO Cars VALUES(6,'Citroen',21000);
INSERT INTO Cars VALUES(7,'Hummer',41400);
INSERT INTO Cars VALUES(8,'Volkswagen',21600);

```

这是一个`Cars`表。

`customers_reservations.sql`

```sql
-- SQL for the Customers, Reservations tables

USE mydb;

CREATE TABLE IF NOT EXISTS Customers(CustomerId INTEGER AUTO_INCREMENT 
    PRIMARY KEY, Name VARCHAR(55));
INSERT INTO Customers(Name) VALUES('Paul Novak');
INSERT INTO Customers(Name) VALUES('Terry Neils');
INSERT INTO Customers(Name) VALUES('Jack Fonda');
INSERT INTO Customers(Name) VALUES('Tom Willis');

CREATE TABLE IF NOT EXISTS Reservations(Id INTEGER AUTO_INCREMENT
    PRIMARY KEY, CustomerId INTEGER, Day DATE);
INSERT INTO Reservations(CustomerId, Day) VALUES(1, '2009-11-22');
INSERT INTO Reservations(CustomerId, Day) VALUES(2, '2009-11-28');
INSERT INTO Reservations(CustomerId, Day) VALUES(2, '2009-11-29');
INSERT INTO Reservations(CustomerId, Day) VALUES(1, '2009-11-29');
INSERT INTO Reservations(CustomerId, Day) VALUES(3, '2009-12-2');

```

这些是`Customers`和`Reservations`表。

`books.sql`

```sql
-- SQL for the Books table

USE mydb;

CREATE TABLE IF NOT EXISTS Books(Id INTEGER PRIMARY KEY, 
    Title VARCHAR(100), Author VARCHAR(60));
INSERT INTO Books VALUES(1,'War and Peace','Leo Tolstoy');
INSERT INTO Books VALUES(2,'The Brothers Karamazov','Fyodor Dostoyevsky');
INSERT INTO Books VALUES(3,'Paradise Lost','John Milton');
INSERT INTO Books VALUES(4,'Crime and Punishment','Fyodor Dostoyevsky');
INSERT INTO Books VALUES(5,'Cousin Bette','Honore de Balzac');

```

这是一个`Books`表。

## 数据来源

*   [MySQL 5.7 参考手册](http://dev.mysql.com/doc/refman/5.7/en/)
*   [维基百科上的 MySQL 文章](https://en.wikipedia.org/wiki/MySQL)

这是对 MySQL 数据库系统的介绍。