0%

数据库/MySQL必知必会

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
2
SELECT COLUMNNAME
FROM TABLENAME;

*未排序数据: *

没有明确排序查询结果,则返回的数据的顺序没有特殊意义。

不区分大小写

SQL语句不区分大小写。许多SQL开发人员喜欢对所有的SQL关键字使用大写,而对所有列和表名使用小写。

忽略空格:在处理SQL语句时,其中的所有空格都被忽略。

4.3 检索多个列

1
2
SELECT prod_id, prod_name,  prod_price 
FROM products;

数据表示:

SQL语句一般返回原始的、无格式的数据。数据的格式化是一个显示问题,而不是一个检索问题。

4.4 检索所有列

使用通配符实现:

1
2
SELECT * 
FROM products;

使用通配符警示:

除非确实需要表中的每个列,否则最好别使用*通配符。因为检索不需要的列通常或降低检索和应用程序的性能。

*通配符优点: *

可以检索出未知列

4.5 检索不同的行

1
2
SELECT DISTINCT vend_id
FROM products;

其中DISTINCT是不同的意思,注意它必须放在列名的前面

不能部分使用DISTINCT:

DISTINCT关键字应用于所有列而不仅是前置它的列

(也就是说,如果检索的不仅仅是一个列,而是两个列,那么对于两个行来说,属于两个列中任何一列的数据不同,那么这两个行就算是不同的。)

4.6 限制结果

SELECT 语句返回所有匹配的行。为了返回第一行或前几行,可以使用LIMIT。

返回第一个5行:

1
2
3
SELECT prod_name
FROM products
LIMIT 5;

返回下一个5行:(前一个是开始的位置,后一个是要检索的行数):

1
2
3
SELECT prod_name
FROM products
LIMIT 5, 5;

行0:

检索出来额第一行为0而不是1

在行数不够时:

LIMIT中指定要检索的行数为检索的最大行数。如果没有足够的行(例如,给出LIMIT 10,5 但只有 13行),MySQL将只返回它能返回的那么多行

LIMIT 4 OFFSET 3==LIMIT 3 ,4**

4.7 使用完全限定的表名

1
2
SELECT tablename.columnname
FROM databasename.tablename;

第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:用来显示服务器错误或警告信息。