SQL,从零基础到入门

本章目录

  • 如何安装MySQL数据库及MySQL Workbench
  • 启动MySQL的3种方式
  • 获取样本数据库
  • 创建数据库
  • SQL书写建议
  • 一些约定俗成的规矩
  • 关系型数据库的关键概念

简单的准备工作

本教程所有实例基于 Windows 操作系统,Mac OS 用户也不必感到沮丧,因为无论你的操作系统是什么,都不会对你学习SQL有多好或多坏的影响,只不过环境不同罢了。

在开始学习前,我们需要准备好必备的“工具”,正所谓“工欲善其事必先利其器”。想想需要什么呢?很简单,一是数据库,二是数据。因为SQL(Structured Query Language)是与数据库交流的语言嘛(o)/~

数据库

本教程采用MySQL,一种由Oracle开发并被广泛应用的关系型数据库管理系统(RDBMS)。有同学要问,难道不可以用其他“软件”吗?当然可以,不同的RDBMS语法之间只有微小的差别,主要看你的应用场景,之所以采用MySQL,是因为它足够常见,容易获取。

如何安装MySQL是件很简单的事情,网上有很多教程和资料,在此不作赘述。但很简单不代表你不会遇到问题,只要保持耐心,通常可以很快找到解决办法。如果部分问题被普遍反映,我会考虑补上这部分的教程。

如何与MySQL互动?通常有三种方式:

1.CMD命令行

在Windows中配置MySQL环境变量后,可在CMD命令行中直接启用MySQL。

SQL,从零基础到入门_第1张图片
在命令行中启动MySQL

如果出现以下错误提示,那是因为你没有在系统服务中启用MySQL服务。

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

解决方法:

右键 → 我的电脑 → 管理 → 服务和应用程序 → 服务 → 启动MySQL

2.MySQL Command Line Client

Client是MySQL程序自带的命令行工具,与系统命令行唯一的区别是直接输入管理员密码即可启动MySQL.

3.MySQL Workbench

Workbench是MySQL的可视化交互工具(GUI),提供数据库查询、建模、管理等丰富功能,也是我建议新人使用的,因为它足够友好。在接下来的实例演示中,我都会采用Wordbench(Mac OS用户可使用Sequel Pro)

数据

本教程教学部分数据采用《SQL必知必会》中的玩具经销商订单录入系统。包含以下几张表(Table):

  • customers
  • orderitems
  • orders
  • products
  • vendors
SQL,从零基础到入门_第2张图片
数据库中的表

新手需要注意的是,在进行数据库表查询前,不要忽略选择数据库这一步。一旦忽略就会出现以下错误提示:

ERROR 1046 (3D000): No database selected

与其同样重要的有:

  • 创建数据库
  • 删除数据库
  • 创建表
  • 删除表

其语法(Syntax)分别是:

CREATE DATABASE 数据库名
DROP DATABASE 数据库名
CREATE TABLE 表名
DROP TABLE 表名

以上操作要谨慎,因为任何一个组织的数据库都不会允许随意创建,特别是删除,会有严格的权限管理。当然,练习数据不用这么小心翼翼。

以下链接是玩具经销商订单录入系统的脚本,点击即可下载。

SQL scripts for MySQL

下载解压后,你将获得2个txt文档,看后缀就知道,它们是无法直接执行的sql脚本,但只需两步,你就可以搭建好一个简单的数据库,开始正式学习了!

TeachYourselfSQL_MySQL
  • 创建并命名数据库,然后选中它(我把它命名为“princess”)

  • 按顺序分别将create和populate里的数据在Workbench中执行(Shift+Ctrl+Enter)

  • 测试你是否成功创建了目标数据库

如果大功告成,当你检索数据库中的表时,就会得到以下数据:

mysql> USE princess;
Database changed
mysql> SHOW TABLES;
+--------------------+
| Tables_in_princess |
+--------------------+
| customers          |
| orderitems         |
| orders             |
| products           |
| vendors            |
+--------------------+
5 rows in set (0.00 sec)

书写建议

由于SQL不区分大小写且忽略所有空格,所以如何书写只是个人习惯问题。但你还是有必要从一开始就养成良好的书写习惯,因为这可以极大地方便阅读和调试。在实际业务中,一个上百行的sql脚本并不少见,如果你不希望别人丢给你一堆不知所云的东西,那么就要先从自己做起,这是在节省大家的时间。

  • 除关键字(Keyword)外,所有名称保持小写

  • 分多行书写且适当应用缩进(制表符)

下面是我一段我心目中觉得可称之为简洁而优雅的sql代码,可供参考。

-- -----------------------------------------
-- Sams Teach Yourself SQL in 10 Minutes
-- http://forta.com/books/0672336073/
-- Example table creation scripts for MySQL.
-- -----------------------------------------


-- ----------------------
-- Create Customers table
-- ----------------------
CREATE TABLE Customers
(
  cust_id      char(10)  NOT NULL ,
  cust_name    char(50)  NOT NULL ,
  cust_address char(50)  NULL ,
  cust_city    char(50)  NULL ,
  cust_state   char(5)   NULL ,
  cust_zip     char(10)  NULL ,
  cust_country char(50)  NULL ,
  cust_contact char(50)  NULL ,
  cust_email   char(255) NULL 
);

没错,以上就是原作者Forta创建数据库表Customers的代码,注释简洁,信息明确。读者可以快速捕捉代码中的关键信息和补充信息而毫不费力。

一些约定俗成的规矩

  • 注释

SQL与其他语言的共同之处在于,同样允许使用单行注释和多行注释。注释是指被注释的部分并不会被当做代码执行,而又不影响语法的正确性。

单行注释

-- Sams Teach Yourself SQL in 10 Minutes

没错,(--)后的部分就会被识别为注释。但它仅能“管一行”,因为它没有那么大的权力,谁有呢?没错,多行注释有。

多行注释

/*
Sams Teach Yourself SQL in 10 Minutes
http://forta.com/books/0672336073/
Example table creation scripts for MySQL.
*/

(/*...*/)中间的所有内容都会被识别为注释。

  • 英文冒号

(;)的存在是为了区分多条SQL语句,建议每条SQL语句后都加上它,不然有的DBMS会报错。

一些关键的概念

理解数据库概念是掌握SQL的前提

以上是原作者贯穿全书始终的信念,这自然有他的道理。不过本教程主要面向零基础学习者,因此并不会纠结在下面这些概念上,但如果你能很好的理解这些概念,那么对于认识关系型数据库以及非关系型数据库都是极好的。

  • 引用完整性
  • 模式
  • 外键
  • 联结
  • 约束
  • 索引
  • 触发器
  • 视图
  • 执行顺序

但下面这些概念你一定要了解,暂时不理解也没关系,会随着应用的增多会有更深刻的认识。

  • 数据库(DATABASE)

  • 表(TABLE)

  • 列(COLUMN)

  • 行(ROW)

  • 主键(PRIMARY KEY)

以上概念作者在书中都有通俗易懂的解释,我不作赘述。特别强调一点的是,最好直接看书中的解释,不要找度娘,并不是准确性的问题,而是我觉得作者的解释更容易让人明白。

学完以上内容,你就可以对自己说我已经入门SQL了!部分有些基础的小伙伴可能会说,就特么这也能算入门?!

我的答案无疑是肯定的。每个人对“入门”的认知不一样,如果你的基础够好,学完整个教程都不能算入门,但SQL这门语言被设计出来不是为了让人学的,是为了让人用的。所以严格说来,如果你不能把SQL应用到实际学习或工作中解决问题,都不能算入门。

但无论如何这是个很好的开始,因为你已经“无痛”学习了。本着“i+1”理论,无论它多么简单,你都在有效接收知识,我想没有比这更重要的了。

接下来会进入实操部分,难度同样只会提升1个level,需要提醒的是,不能一目十行,一定要每条语句都自己尝试一下,看看能否得出和我一样的结果。遇到疑惑的部分,也不可以略过,因为实操中的每一部分都是你无论如何要掌握的。

你可能感兴趣的:(SQL,从零基础到入门)