mysql必知必会--了解SQL
什么是数据库
数据库这个术语的用法很多,但就本书而言,数据库是一个以某种
有组织的方式存储的数据集合。理解数据库的一种最简单的办法是将其
想象为一个文件柜。此文件柜是一个存放数据的物理位置,不管数据是
什么以及如何组织的
数据库(database) 保存有组织的数据的容器(通常是一个文
件或一组文件
人们通常用数据库这个术语来代表他们使用
的数据库软件。这是不正确的,它是引起混淆的根源。确切
地说,数据库软件应称为DBMS(数据库管理系统)。数据库
是通过DBMS创建和操纵的容器。数据库可以是保存在硬设备
上的文件,但也可以不是。在很大程度上说,数据库究竟是
文件还是别的什么东西并不重要,因为你并不直接访问数据
库;你使用的是DBMS,它替你访问数据库
表
表(table) 某种特定类型数据的结构化清单。
这里关键的一点在于,存储在表中的数据是一种类型的数据或一个
清单。决不应该将顾客的清单与订单的清单存储在同一个数据库表中。这
样做将使以后的检索和访问很困难。应该创建两个表,每个清单一个表。
数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的,
这表示数据库中没有其他表具有相同的名字
表名 表名的唯一性取决于多个因素,如数据库名和表名等的
结合。这表示,虽然在相同数据库中不能两次使用相同的表名,
但在不同的数据库中却可以使用相同的表名。
模式(schema) 关于数据库和表的布局及特性的信息
是模式还是数据库? 有时,模式用作数据库的同义词。遗憾
的是,模式的含义通常在上下文中并不是很清晰。本书中,模
式指的是上面给出的定义
列和数据类型
列(column) 表中的一个字段。所有表都是由一个或多个列组
成的
解列的最好办法是将数据库表想象为一个网格。网格中每一列存
储着一条特定的信息。例如,在顾客表中,一个列存储着顾客编号,另
一个列存储着顾客名,而地址、城市、州以及邮政编码全都存储在各自
的列中。
正确地将数据分解为多个列极为重要。例如,城市、
州、邮政编码应该总是独立的列。通过把它分解开,才有可能
利用特定的列对数据进行排序和过滤(如,找出特定州或特定
城市的所有顾客)。如果城市和州组合在一个列中,则按州进
行排序或过滤会很困难
数据库中每个列都有相应的数据类型。数据类型定义列可以存储的
数据种类。例如,如果列中存储的为数字(或许是订单中的物品数),则
相应的数据类型应该为数值类型。如果列中存储的是日期、文本、注释、
金额等,则应该用恰当的数据类型规定出来
数据类型(datatype) 所容许的数据的类型。每个表列都有相
应的数据类型,它限制(或容许)该列中存储的数据。
数据类型限制可存储在列中的数据种类(例如,防止在数值字段中
录入字符值)。数据类型还帮助正确地排序数据,并在优化磁盘使用方面
起重要的作用。因此,在创建表时必须对数据类型给予特别的关注
行
表中的数据是按行存储的,所保存的每个记录存储在自己的行内。
如果将表想象为网格,网格中垂直的列为表列,水平行为表行
行(row) 表中的一个记录
是记录还是行? 你可能听到用户在提到行(row)时称其为
数据库记录(record)。在很大程度上,这两个术语是可以互相
替代的,但从技术上说,行才是正确的术语。
主键
表中每一行都应该有可以唯一标识自己的一列(或一组列)。一个顾
客表可以使用顾客编号列,而订单表可以使用订单ID,雇员表可以使用
雇员ID或雇员社会保险号。
主键(primary key)一一列(或一组列),其值能够唯一区分表
中每个行。
唯一标识表中每行的这个列(或这组列)称为主键。主键用来表示
一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安
全的方法保证只涉及相关的行
应该总是定义主键 虽然并不总是都需要主键,但大多数数据
库设计人员都应保证他们创建的每个表具有一个主键,以便于
以后的数据操纵和管理。
表中的任何列都可以作为主键,只要它满足以下条件:
- 任意两行都不具有相同的主键值;
- 每个行都必须具有一个主键值(主键列不允许NULL值)
主键值规则 这里列出的规则是MySQL本身强制实施的
主键通常定义在表的一列上,但这并不是必需的,也可以一起使用
多个列作为主键。在使用多列作为主键时,上述条件必须应用到构成主
键的所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)
主键的最好习惯 除MySQL强制实施的规则外,应该坚持的
几个普遍认可的最好习惯为:
- 不更新主键列中的值;
- 不重用主键列的值;
- 不在主键列中使用可能会更改的值。(例如,如果使用一个
名字作为主键以标识某个供应商,当该供应商合并和更改其
名字时,必须更改这个主键。)
什么是SQL
SQL(发音为字母S-Q-L或sequel)是结构化查询语言(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语法是完全可移植的
这一章介绍了什么是SQL以及它为什么很有用。因为SQL是用来与数
据库打交道的,所以,我们也复习了一些基本的数据库术语
mysql必知必会--了解SQL的更多相关文章
- MySQL必知必会-官方数据库表及SQL脚本导入生成
最近在复习SQL语句,看的是MySQL必知必会这本书,但是发现附录中只有表设计,没有表的具体数据.所以在学习相应的语句中体验不是很好,去网上查了数据库的内容,自己慢慢导入到了数据库中.把表放出来作为参 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会--建立练习环境
书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...
- 《MySQL 必知必会》读书总结
这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...
- SQL 必知必会
本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...
- 《MySQL必知必会》[01] 基本查询
<MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...
- 你必知必会的SQL面试题
写在前面的话 本文参考原博<走向面试之数据库基础:一.你必知必会的SQL语句练习-Part 1>和<走向面试之数据库基础:一.你必知必会的SQL语句练习-Part 2>进行练习 ...
- mysql必知必会系列(一)
mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...
- 《mysql必知必会》读书笔记--存储过程的使用
以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...
- mysql必知必会
春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...
随机推荐
- 19_07_07校内训练[xor]
题意 长度为n的数组,上面有k个位置是1,现在有l种长度的连续全1串,要求用最少的次数将这个数组异或成全0的数组.n<=1E5,k<=10,l<=100. 思考 先将数组进行异或的差 ...
- 红黑树(依照4阶B树C++实现)
我在编写红黑树的时候类比这2-3-4树的原理来书写 语言标准:C++11 在Ubuntu 18.04上通过编译和测试 从刚开始只听说过这个概念,到学习,再到编出代码,然后在进行测试,最后完成代码一共花 ...
- P4452 [国家集训队]航班安排(最大费用最大流)
P4452 [国家集训队]航班安排 题目传送门 解题思路: 感觉题面让人有很多误解,就是说有k架飞机在0点从0号机场起飞,在t时刻返回机场,给出空载飞行的时间和花费以及m个包机请求的花费和起始时间和终 ...
- Python中heapq与优先队列【详细】
本文始发于个人公众号:TechFlow, 原创不易,求个关注 今天的文章来介绍Python当中一个蛮有用的库--heapq. heapq的全写是heap queue,是堆队列的意思.这里的堆和队列都是 ...
- 第一篇:CDH配置本地http服务
在我们安装cdh的时候,避免不了要安装一大堆软件,包括cm的服务器,hadoop的各种组件.这些组件的文件都比较大,所以我们会在本地配置一个http服务,以便于在安装cdh服务的时候能快速的安装完.本 ...
- SVN本地服务器搭建及在Eclipse中的应用
0.说明在程序开发的时候会有很多的版本,通过手动备份的方式不紧麻烦而且低效易出错.使用SVN来管理版本会方便很多,虽然有一些学习成本,但是学会使用之后会使得开发更加的高效.本文介绍如何在本地搭建svn ...
- 【5min+】 这些C#的运算符您都认识吗?
系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...
- 🔥SpringBoot图文教程2—日志的使用「logback」「log4j」
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
- [python之路]简单介绍
python介绍 #python是一个什么样的语言?编译型和解释型静态语言和动态语言强类型定义语言和弱类型定义语言python是一门动态解释性的强类型定义语言. #Python的优缺点##优点Pyth ...
- [win]更改win终端编码
更改cmd的编码格式 chcp: 显示当前的编码格式 chcp 65001: 更改当前编码格式为UTF-8 字体选择`Lucida Console` 更改PowerShell编码格式(from zhi ...