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。
在命令行中启动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
新手需要注意的是,在进行数据库表查询前,不要忽略选择数据库这一步。一旦忽略就会出现以下错误提示:
ERROR 1046 (3D000): No database selected
与其同样重要的有:
- 创建数据库
- 删除数据库
- 创建表
- 删除表
其语法(Syntax)分别是:
CREATE DATABASE 数据库名
DROP DATABASE 数据库名
CREATE TABLE 表名
DROP TABLE 表名
以上操作要谨慎,因为任何一个组织的数据库都不会允许随意创建,特别是删除,会有严格的权限管理。当然,练习数据不用这么小心翼翼。
以下链接是玩具经销商订单录入系统的脚本,点击即可下载。
下载解压后,你将获得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,需要提醒的是,不能一目十行,一定要每条语句都自己尝试一下,看看能否得出和我一样的结果。遇到疑惑的部分,也不可以略过,因为实操中的每一部分都是你无论如何要掌握的。