MySQL数据库基本概念

本文首先了解几个基本的概念,如数据库、关系型数据库、数据表、字段等,然后讨论了如何通过HeidiSQL将CSV数据导入MySQL数据库中。

数据库

数据库(DB,database),也就是数据仓库,用于存储和管理数据;而MySQL、SQL Server等称为数据库管理系统(DBMS),在存储和管理数据的基础上又包括了更多的功能和工具,可以更加高效的处理和使用数据。在数据库管理系统中,一般可以有一个或多个数据库(或数据库实例)。

MySQL数据库的应用基于网络服务,称为网络数据库,可以使用客户端或开发组件连接服务器(地址和端口)进行操作。相对的称为“桌面数据库”,如Access、SQLite3等,操作这些数据库时,会直接读取本地的数据库文件。

操作MySQL数据库时,可以使用自带的mysql客户端,也可以使用其他第三方客户端软件,如上篇文章中介绍的HeidiSQL等。

接下来的内容并不刻意区分数据库和数据库管理系统的概念,但一般来讲,如提到MySQL则表示MySQL数据库管理系统;如果使用一个命名数据库,则是MySQL数据库管理系统中一个具体的数据库,如cdb_demo数据库。

关系型数据库

关系型数据库中,数据的基本组织形式是二维表与各表之间的关系,并使用SQL语句进行操作,包括数据的定义和管理等。如MySQL、SQL Server、Access、SQLite3等就属于关系型数据库。

二维表的概念相信大家不会陌生,如Excel中的工作表就是典型的二维表格式;不同的是,Excel中的格式是按单元格设置的,而在数据库中,每个字段(列)的数据类型和其它属性需要在设计表结构时确定。

关系型数据库中,表和表之间是通过一系列的“键(key)”联系起来的,如下图所示。

关联表

图中包括“订单”和“订单详情”两个数据表,它们都包含了“订单号”字段(列),而这两个表的关系就是通过“订单号”进行关联。在“订单”表中包含了订单的主要信息,唯一的“订单号”字段定义为主键(PK,Primary Key);“订单详情”表中包含了每个订单的商品信息,其中每一个“订单号”可以包含多个商品信息,图中显示的关系也正是“一对多”,即一个订单可对应多个商品。

数据表和字段

数据库中,数据表是保存数据的基本单位,是由字段、各种“键”等要素定义。在MySQL中创建数据表使用create table语句,基本语法如下:

MySQL
create table <表名> (<字段定义>) engine=innodb default charset=utf8mb4;

其中,<字段定义>包含数据表中各字段(列)的定义,也就是确定了表的数据结构。之后的engine参数指定MySQL表的引擎类型,这里使用innodb;default charset参数指定数据表的默认编码,这里使用utf8mb4。

下面创建测试数据库和数据表,在HeidiSQL中连接到本地测试服务器,然后在“查询”中输入或粘贴如下代码。

MySQL
create database cdb_demo default charset=utf8mb4;

use cdb_demo;

create table t1(
recid bigint not null auto_increment primary key,
f1 varchar(15) not null unique,
f2 varchar(30) not null,
f3 varchar(18),
f4 bigint,
f4a bigint,
f4b bigint,
f5 decimal(15,2),
f5a decimal(15,2),
f6 datetime
)engine=innodb default charset=utf8mb4;

可以使用HeidiSQL工具栏中的“执行”按钮或键盘F9执行,代码会创建cdb_demo数据库,并在cdb_demo数据库中创建t1数据表,表中创建了recid、f1、f2、f3、f4、f4a、f4b、f5、f5a、f6共10个字段(列),使用了bigint、varchar、deicamal和datetime等数据类型。

下面导入一些测试数据,下载地址http://caohuayu.com/res/Res.aspx?id=res20251201。接下来,将测试数据中的“测试数据2.csv”文件中的数据导入到t1表中。通过HeidiSQL菜单“工具”>>“导入CSV文件”打开操作窗口,如下图所示,需要根据实际情况修改其中的设置。

导入CSV数据

本例需要注意的几个地方包括:

  • 位置(1)指定CSV文件路径。
  • 位置(2)指定字段数据的分隔符,本例CSV文件中使用逗号。
  • 位置(3),因为是第一次导入,所以选择INSERT,即添加新记录。
  • 位置(4),选中客户端解析数据。
  • 位置(5),“测试数据2.csv”文件中没有包含recid字段,所以不选择此字段。t1表中的recid字段数据会自动生成。

设置完成后点击“导入!”按钮执行导入,操作成功后可以通过如下语句查看导入的数据。

MySQL
select * from cdb_demo.t1;

这里使用了select语句,*表示所有字段(列),from关键字指定数据源,这里使用了“<数据库>.<表>”的格式,指定数据源为cdb_demo数据库中的t1表。如果需要大量使用某个数据库中的对象,可以使用use语句引用数据库,如下面的代码可以完成相同的查询工作。

MySQL
use cdb_demo;
select * from t1;

下图显示了t1表中的部分数据。

查询数据