1.1.1 什么是数据库(database)
数据库(database)是一个以某种有组织的方式存储的数据集合
1.1.2 表(table)
将资料放入文件柜,不是随意地扔进某个抽屉就完事,而是在文件柜中创建文件,然后将相关的资料放入特定的文件中。
这个文件就是表。
表是一种结构化的文件,可用来存储某种特定类型的数据。
存储在表中的数据是一种类型的数据或一个清单。绝不应该将顾客的清单与订单的清单存储在同一个数据库表中。
相同数据库中每一个表都有自己独一无二的名字。
表有自己的模式(这个模式是一组信息,定义了数据在表中如何存储,如可以存储什么样的数据,数据如何分解,各部分信息如何命名等等)
模式可以用来描述数据库中特定的表以及整个数据库(和其中表的关系)
1.1.3 列(column)和数据类型(datatype)
表由列组成
列(column): 表中的字段。所有的表都是由一个或多个列组成的。
将数据库理解为一个网格,网格中的每一列存储同类型的信息。
正确分解数据是找到某个特定信息的前提。
数据库中每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。
1.1.4 行(row)—— 表中的一个记录
表中的数据都是按行存储的。
行(row)和数据记录(record)在很大程度上,是可以相互替代的,但从技术上来说,行才是正确的术语
1.1.5 主键(primary key) - 一列(或一组列),其值能够唯一区分表中的每个行
唯一标识表中每行的这个列(或这组列)称为主键。逐渐用来表示一个特定的行。
应该总是定义主键
表中的任何列都可以作为主键,只要它满足以下条件:
- 任意两行都不具有相同的主键值
- 每个行都必须具有一个主键值(主键列不允许NULL值)
主键通常定义在表的一列上,但这并不是必需的,也可以一起使用多个列作为主键。使用多个列作为主键时,上述条件必须应用到构成主键的所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)
主键的最好习惯:
- 不更新主键列中的值
- 不重用主键列的值
- 不在主键列中使用可能会更改的值
1.2 什么是SQL
是一种专为用来与数据库通信的语言
设计SQL的目的是很好地完成一项任务,即提供一种从数据库中读写数据的简单有效的方法
SQL的优点:
- SQL不是某个特定数据库供应商专有的语言。
- 简单易学。
- SQL看上去很简单,但是它其实是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
第2章
2.1 什么是MySQL
2.1.1 客户机-服务器软件
与数据文件打交道的只有服务器软件。关于数据、数据添加、删除和数据更新的所有请求都由服务器软件完成。这些请求或更改来自运行客户机软件的计算机。
为进行所有数据库交互,客户机软件都要与服务器软件进行通信。
2.2.1 mysql命令行实用程序
- 命令输入在mysql>之后
- 命令;或\g结束。近按Enter不执行命令
- 输入help或\h获得帮助
- 输入quit或者exit退出命令行实用程序
3.2 选择数据库
执行任意数据库操作前,需要选择一个数据库。为此,可以使用USE关键字(key word)
第4章: 检索数据
使用SELECT语句从表中检索一个或多个数据列
4.1 SELECT语句
最经常使用的关键字就是SELECT语句了。它的用途是从一个或多个表中检索信息
使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择
1 | SELECT COLUMNNAME |
*未排序数据: *
没有明确排序查询结果,则返回的数据的顺序没有特殊意义。
不区分大小写:
SQL语句不区分大小写。许多SQL开发人员喜欢对所有的SQL关键字使用大写,而对所有列和表名使用小写。
忽略空格:在处理SQL语句时,其中的所有空格都被忽略。
4.3 检索多个列
1 | SELECT prod_id, prod_name, prod_price |
数据表示:
SQL语句一般返回原始的、无格式的数据。数据的格式化是一个显示问题,而不是一个检索问题。
4.4 检索所有列
使用通配符实现:
1 | SELECT * |
使用通配符警示:
除非确实需要表中的每个列,否则最好别使用*通配符。因为检索不需要的列通常或降低检索和应用程序的性能。
*通配符优点: *
可以检索出未知列
4.5 检索不同的行
1 | SELECT DISTINCT vend_id |
其中DISTINCT是不同的意思,注意它必须放在列名的前面
不能部分使用DISTINCT:
DISTINCT关键字应用于所有列而不仅是前置它的列
(也就是说,如果检索的不仅仅是一个列,而是两个列,那么对于两个行来说,属于两个列中任何一列的数据不同,那么这两个行就算是不同的。)
4.6 限制结果
SELECT 语句返回所有匹配的行。为了返回第一行或前几行,可以使用LIMIT。
返回第一个5行:
1 | SELECT prod_name |
返回下一个5行:(前一个是开始的位置,后一个是要检索的行数):
1 | SELECT prod_name |
行0:
检索出来额第一行为0而不是1
在行数不够时:
LIMIT中指定要检索的行数为检索的最大行数。如果没有足够的行(例如,给出LIMIT 10,5 但只有 13行),MySQL将只返回它能返回的那么多行
LIMIT 4 OFFSET 3==LIMIT 3 ,4**
4.7 使用完全限定的表名
1 | SELECT tablename.columnname |
第5章 —— 排序检索数据
使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据。
常见命令
- SHOW DATABASES; - 返回可用数据库的一个列表。
- SHOW TABlES; - 返回当前选择的数据库内的可用表的列表。
- SHOW COLUMN FROM 表名: 要求给出一个表名,它对每个字段返回一行,行中包含字段名、数据类型、是否允许NULL、键类型、默认值以及其他信息
- DISsCRIBE 表名——是SHOW COLUMNS FROM 表名的快捷键
- SHOW STATUS:用于显示广泛的服务器状态信息
- SHOW CREATE DATABASE和SHOW CREATE TABLE:分别用来显示创建特定数据库或表的MySQL语句。
- SHOW GRANTS:用来显示授权用户(所有用户或特定用户)的安全权限;
- SHOW ERRORS 和SHOW WARNINGS:用来显示服务器错误或警告信息。