【新人培训资料】通往SQL之路-数据库篇
【新员工培训资料】通往SQL的道路-数据库篇
故事概要
有很多新人加入。新人的水平也各不相同。教育材料也过时了,需要更新。
反正都要更新,那就顺便公开吧。于是,我们决定逐步更新新人教育用的资料。
建议您存储这个信息,因为我们会经常根据请求进行更新。
我在TEMONA株式会社担任CTO,但我认为比起一味地学习理论,更有效率的学习方式是通过能够大致把握思路的学习,并在实践中深化知识。
请看看他在Wantedly上的其他演讲和采访文章。
我們會以一種教育方式,不是嚴格地教授正確的事情,而是通過組織資料,讓初學者能夠大致了解。
以下是我要讲的关于这个系列的话题。
那么,让我们开始这一次的新旅程吧!
DB是指数据库。
这次我们将以学习SQL为目标,开始探讨关于SQL的话题。现在DB(数据库)已经变得如此常见,成为日常交流中不可或缺的内容,所以让我们一起学习,以便在工作中能跟上相关的对话。
DB(数据库:Data Base)是指数据的集合。它可以用以下这种图标来表示。
数据文件已经整理和存储,并由数据库管理系统(DBMS)进行管理。
DB和DBMS合称为数据库系统。
在数据库管理系统(DBMS)中,数据主要分为以下三个部分组成。
-
- データ・ファイル
-
- ログ・ファイル
- コントロール・ファイル
虽然会出现很多难懂的词汇,但只要你最终能认识到它是一组数据的集合就好。
数据库通常具有以下特点:
* 不依赖于特定的程序。
* 公开了结构和存储格式(模式:Schema)。
请事先查找一下「模式(スキーマ)」这个词汇,因为它很常见。
数据库的种类
数据库有各种类型,但我们来学习关系型数据库系统(RMDBS)。起初,只要能理解除此之外还有其他类型存在就可以了。
-
- リレーショナル型データベース
PostgreSQL
MySQL
SQLite
Microsoft SQL server
oracle
db2
カラム指向型データベース(列指向型)
PureData System for Analytics(旧Netezza)
exadata
SAP HANA
Cassandra
DynamoDB
memcached
redis
bigtable
hbase
ドキュメント指向型データベース
mongodb
couchdb
グラフデータベース
neo4j
時系列データベース
Graphite
InfluxDB
opentsdb
关系型数据库
多个表的集合。每个表都与其他表有关系(关联)。
首先,让我们以使用关系型数据库进行学习。
以下的特点可能因为调整和优化而有所变化,所以很难一概而论。我会根据默认设置来描述。
桌子是
由行(column:カラム)和列(record:レコード)组成的二维表格。类似于Excel等电子表格软件。是关系型数据库的基本单位。
行指向即为按行操作或处理数据的方式,而列指向(又称为“カラム型”)则是按列操作或处理数据的方式。
行指向数据库
将一行数据作为一个数据块来处理。逐个提取并进行处理。
例如,常见的操作包括”根据特定条件搜索并提取行”等。
列指向数据库(Columnar database)
将一列数据视为一个整体进行处理。
例如,在执行操作“同时更新表中所有记录的特定列的值”时非常方便。它擅长对特定列进行汇总等针对列进行批量操作的处理。
列和数据类型
在创建表格时,我们需要指定要插入的数据和结构。列的类型有以下几种。
尽管标准SQL已定义了这些类型,但每种关系型数据库管理系统(RMDB)可能有所不同,因此请务必在之前进行调查以了解数据类型的差异。
索引和数据
索引是一种机制,用于快速访问存储在表中的数据。我们可以将其理解为书籍的索引。在创建表时,根据需要为列定义索引。也可以说,在列上创建索引是指”张贴索引”。
对于列来说,即使创建索引也没有意义。相反,当对表进行除引用以外的操作时,必须更新索引,这会导致变慢。此外,存储索引的索引文件也会增加文件容量。
在开发过程中,需要准备与实际生产数据接近的模拟数据,并试着使用所需的SQL命令,来查看RDBMS的缓存命中率以及基数的情况,并在查询过程中进行索引的创建。
範例)索引的類型
根据不同的关系型数据库管理系统,索引也有不同的类型。应根据可能的值分布和特性来选择索引。
-
- ビットマップインデックス
-
- Btreeインデックス
- ハッシュインデックス
标准SQL
SQL(结构化查询语言)是关系数据库管理系统(RDBMS)中用于查询数据的语言。
最初,每个RDBMS都有不同的语言规范。因此,它已经被标准化为国际标准。与标准化规范相符的被称为标准SQL。称为SQL92规范等,但如果掌握了SQL92规范和SQL99规范,大多数SQL都可以使用。SQL92规范等并非公开公开的内容,因此无法立即从互联网上获取。但是,由于有很多书籍进行了解释,所以我们推荐对此感兴趣的人购买。
如果你对此感兴趣,可以看一看,因为SQL也在日本被定义为JIS标准。
JISX3005-2
※如果使用Mac可能无法查看。
各种RDBMS基本上都是按照标准SQL进行设计的。在实际开发中,我们也不会依赖于特定的RDBMS而使用特定的SQL,而是基于标准SQL进行开发,这样在数据库规模变大且需要迁移到其他系统时,我们可以以较少的工作量进行适应。
有一些网站可以检查你所写的SQL是否符合标准的SQL,试试看会很有趣。
可以试试标准的SQL92规范检查器。
安装MySQL
让我们使用关系型数据库MySQL作为我们的学习环境。虽然实际上我们计划从”【新人教育 资料】SQL的道路 〜SQL基本操作篇〜”开始,但我们可以先安装MySQL。
如果已经安装了HomeBrew,请跳过此步骤。
$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
使用【Mac】HomeBrew安装MySQL时指定版本。
brew的更新
$ brew update
确认MySQL的版本
% brew search mysql
automysqlbackup mysql mysql-connector-c++
homebrew/versions/mysql51 mysql++ mysql-sandbox
homebrew/versions/mysql55 mysql-cluster mysql-search-replace
homebrew/versions/mysql56 mysql-connector-c mysqltuner
homebrew/php/php53-mysqlnd_ms Caskroom/cask/mysql-connector-python
homebrew/php/php54-mysqlnd_ms Caskroom/cask/mysql-utilities
homebrew/php/php55-mysqlnd_ms Caskroom/cask/mysqlworkbench
homebrew/php/php56-mysqlnd_ms Caskroom/cask/navicat-for-mysql
冲泡
$ brew install homebrew/versions/mysql56
确认MySQL
$ brew info mysql
启动MySQL
$ mysql.server start
Starting MySQL
. SUCCESS!
连接MySQL
$ mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.25 Homebrew
MySQL的安全设置(根据需要)
养成进行安全设置的习惯。
$ mysql_secure_installation
-
- root ユーザのパスワード設定
-
- anonymous ユーザの削除
-
- root ユーザがリモートサーバからログインできないようにする
- 初期サンプルDBの削除
验证连接
$ mysql -uroot -p
Enter password:[設定したパスワード]
最后的话
最近出来太多方便的框架,所以觉得很多人几乎没有接触过SQL。
虽然实际上应该尽快利用方便的工具,但同时也要努力理解理论部分,确保能够深入理解。
如果你在开发过程中不仅需要使用SQL,还需要进行系统的建模定义,那么建议阅读以下的UML道系列。如果你有时间的话,请看一下。
【新员工教育资料】第一章 接触UML的道路 〜面向对象编程部分〜