zoukankan      html  css  js  c++  java
  • 《MySQL必知必会》学习笔记——第1章 了解SQL

    第1章 了解SQL

    本章将介绍数据库和SQL,它们是学习MySQL的先决条件。

    1.1 数据库基础

    你正在阅读本书,这表明你需要以某种方式与数据库打交道。在深入学习MySQL及其SQL语言的实现之前,应该对数据库几数据库技术的某些基本概念有所了解。
    你可能还没有意识到,其实你自己一直在使用数据库。每当你从自己的电子邮件地址簿里查找名字时,你就在使用数据库。如果你在某个因特网搜索站点上进行搜索,也是在使用数据库。如果你在工作中登录网络,也需要依靠数据库验证自己的名字和密码。即使在自动取款机上使用ATM卡,也要利用数据库进行PIN码验证和余额检查。
    虽然我们一直都在使用数据库,但对酒精什么事数据库并不十分清楚。特别是不同的人可能会使用想用的数据库术语表示不同的事务,更加剧了这种混乱。因此,我们学习的良好切入点就是给出一张最重要的数据库术语清单,并加以说明。

    基本概念回顾 下面是某些基本数据库概念的简要介绍。如果你已经具有了一定的数据库经验,这可以用于复习巩固;如果你是一个数据库新手,这将给你提供一些必需的基本知识。理解数据库是掌握MySQL的一个重要部分,如果有必要的话,你应该参阅一些有关数据库基础知识的书籍。(推荐人民邮电出版社的由Kifer、Bernstein和Lewis合著的《数据库系统:面向应用的方法》或Elmasri和Navathe合著的《数据库系统基础》。——编者注)

    1.1.1 什么是数据库

    数据库这个术语的用法很多,但就本书而言,数据库是一个以某种有组织的方式存储的数据集合。理解数据库的一种最简单的办法是将其想象成一个文件柜。次文件柜是一个存放数据的物理位置,不管数据是什么以及如何组织的。

    数据库(database) 保存有组织的数据的容器(通常是一个文件或一组文件)。

    误导导致混淆 人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的,它是引起混淆的根源。确切地说,数据库软件应成为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器,数据库可以使保存在硬设备上的文件,但也可以不是。在很大程度上说,数据库究竟是文件还是别的什么东西并不重要,因为你并不直接访问数据库;你使用的是DBMS,它替你访问数据库。

    1.1.2 表

    在你讲资料放入自己的文件柜时,并不是随便讲他们扔进某个抽屉就完事了,而是在文件柜中创建文件,而是将相关的资料放入特定的文件中。
    在数据库领域中,这种文件成为表。表是一种结构化的文件,可用来存储某种特定类型的数据。表可以保存顾客清单、产品目录,或者其他信息清单。

    表(table) 某种特定类型的结构化清单。

    这里关键的一点在于,存储在表中的数据是一种类型的数据或一个清单。决不应该将顾客的清单与订单的清单在同一个数据库表中。这样做将使以后的检索和访问很困难。应该创建两个表,每个清单一个表。
    数据库中的每个表都有一个名字,用来标识自己。此名字使唯一的,这表示数据库中没有其他表具有的相同的名字。

    表名 表名的唯一性取决于多个因素,如数据库名和表名等的结合。这表示,虽然在相同数据库中两次使用相同的表名,但在不同的数据库中却可以使用相同的表名。

    表具有一些特性,这些特性定义了数据在表中如何存储,如可以存储什么样的数据,数据如何分解,各部分信息如何命名,等等。描述表的这组信息就是所谓的模式,模式可以用来描述数据库中特定的表以及真个数据库(和其中的表的关系)。

    模式(schema) 关于数据库和表的布局及特性的信息。

    是模式还是数据库? 有时,模式用做数据库的同义词。遗憾的是,模式的含义在上下文中并不是很清晰。本书中,模式指的是上面给出的定义。

    1.1.3 列和数据类型

    表由列组成。列中存储着表中某部分的信息。

    列(column) 表中的一个字段。所有表都是由一个或多个列组成的。

    理解列的最好办法是将数据库中表想象成一个网格。网格中每一列存储着一条特定的信息。例如,在顾客表中,一个列存储着顾客编号,另一个列存储着顾客名,而地址、城市、州以及行政编码全都存储在各自的列中。

    分解数据 正确地将数据分解为多个列极为重要。例如,城市、州、邮政编码应该总是独立的列。通过把它分解开,才有可能利用特定的列对数据进行排序和过滤(如,找出特定州或特定城市的所有顾客)。如果城市和州组合在一个列中,则按州进行排序或过滤会很困难。

    数据库中每个列都要相应的数据类型。数据类型定义列可以存储的数据种类。例如,如果列中存储的为数字(或许是订单中的物品数),则相应的数据类型应该为数值类型。如果列中存储的是日期、文本、注释、金额等,则应该用恰当的数据类型规定出来。

    数据类型(datatype) 所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。

    数据类型限制可存储在列中的数据类型(例如,防止在数值字段中录入字符值)。数据类型还帮助正确地排序数据,并在优化自盘使用方面起重要的作用。因此,在创建表时必须对数据类型给予特别的关注。

    1.1.4 行

    表中的数据是按行存储的,所保存的每个记录存储在自己的行内。如果将表想想为网格,网格中垂直的列为表列,水平行为表行。
    例如,顾客表可以每行存储一个顾客。表中的行数为记录的总数。

    行(row) 表中的一个记录。

    是记录还是行? 你可能听到用户在提到行(row)时称其为数据库记录(record)。在很大程度上,这两个术语是可以互相替代的,但从技术上说,行才是正确地术语。

    1.1.5 主键

    表中每一行都应该由可以魏毅表示自己的一列(或一组列)。一个顾客表可以使用顾客编号列,而订单表可以使用订单ID,雇员表可以使用雇员ID或雇员社会保险号。

    主键(primary key) 一列(或一组列),其值能够唯一区分表中每个行。

    唯一标识表中每行的这个列(或这组列)称为主键。主键用来标识一个特定的行,没有主键,更新或身处表中特定行很困难,因为没有安全的方法保证只涉及相关的行。

    __应该总是定义主键__ 虽然并不总是都需要主键,但大多数数据库设计人员都应保证他们创建的每个表具有一个主键,以便于以后的数据操纵和管理。

    表中的任何列都可以作为主键,只要它满足以下条件:

    • 任意两行都不具有相同的主键值;
    • 每个行都必须具有一个主键值(主键列不允许NULL值)。
    主键值规则 这里列出的规则是MySQL强制实施的。

    主键通常定义在表的一列上,但这并不是必需的,也可以一起使用多个列作为主键。在使用多个列作为主键时,上述条件必需应用到构成主键的所有列,所有列值得组合必须是唯一的(但单个列的值可以不唯一)。

    主键的最好习惯 除MySQL强制实施的规则外,应该坚持的几个普遍认可的最好习惯为:
    • 不更新主键列中的值;
    • 不重用主键列中的值;
    • 不在主键列中使用可能会更改的值。(例如,如果使用一个名字作为主键以标识某个供应商,当供应商合并和更改其名字时,必需更改这个主键。)

    1.2 什么是SQL

    SQL(发音为S-Q-L或squal)是结构化查询语言(Structured Query Language)的缩写。SQL是一种专门用来与数据库通信的语言。
    与其他语言(如,英语以及Java和Visual Basic这样的程序设计语言)不一样,SQL由很少的词构成,这是有意而为的。涉及SQL的目的是很好地完成一项任务,即提供一种从数据库中读写数据的简单有效的方法。
    SQL由如下优点:

    • SQL不是某个特定数据库提供商装有的语言。几乎所有重要的DBMS都支持SQL,所以,学习词语言使你几乎能与所有数据库打交道。
    • SQL简单易学。它的语句全都是由描述性很强的英语单词组成,而且这些单词的数目不多。
    • SQL尽管看上去很简单,但它实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
    DBMS专用的SQL SQL不是一种专利语言,而且存在一个标准委员会,他们试图定义可供所有DBMS使用的SQL语法,但事实上任意两个DBMS实现的SQL都不完全相同。本书讲授的SQL是专门针对MySQL的,虽然书中所讲授的多数语法也适用于其他DBMS,但不要认为这些SQL语法是完全可移植的。

    1.3 动手实践

    本书所有章节采用可上机运行的例子来说明SQL语法,它的功能是什么,为什么起这样的作用。作者强烈建议读者实验每个例子,以便掌握MySQL的第一手资料。
    附录B描述了本书中使用的样例表,说明如何获得和安装它们。如果你还没有获得和安装它们,请在继续学习前先学习这个附录。

    你需要MySQL 显然,你需要能访问某个MySQL副本,以便学习本书的内容。附录A说明了在何处获得MySQL的副本,并提供一定的入门指导。如果你已经能访问某个MySQL副本,在继续学习之前,也请先阅读该附录。

    1.4 小结

    这一张介绍了什么事SQL以及它为什么很有用。因为SQL是用来与数据库打交道的,所以,我们也复习了一些基本的数据库术语。

  • 相关阅读:
    MyBatis Sql Session 批量插入
    Node.js 之react.js组件-Props应用
    Node.js 之react.js组件-JSX简介
    Node.js项目笔记(一)
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
    2020软件工程作业00——问题清单
    2020软件工程作业04
    2020软件工程作业03
    2020软件工程作业02
  • 原文地址:https://www.cnblogs.com/zifeiy/p/10335666.html
Copyright © 2011-2022 走看看