美文网首页
SQL,从零基础到入门

SQL,从零基础到入门

作者: 赵太一 | 来源:发表于2017-03-25 19:02 被阅读503次

    本章目录

    • 如何安装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 表名
    

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

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

    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,从零基础到入门

          本文链接:https://www.haomeiwen.com/subject/uhvanttx.html