MySQL基础概念

MySQL基础概念_第1张图片1.基础概念

 

这些概念都是基本常识,总结下来可以浏览一下。

 

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

 

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

 

表是一种结构化的文件,可用来存储某种特定类型的数据。表可以保存顾客清单、产品目录,或者其他信息清单。表名具有唯一性,同一个数据库下,不应有两个相同名字的表。

 

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

 

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

 

有些资料上的模式和数据库含义相同,需要注意

 

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

 

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

 

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

 

主键(primary key)指一列(或一组列),其值能够唯一区分表中每个行。可以着重理解key。

 

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

 

任意两行都不具有相同的主键值;

每个行都必须具有一个主键值(主键列不允许NULL值)。

除MySQL强制实施的规则外,应该坚持的几个普遍认可的最好习惯为:

 

不更新主键列中的值;

不重用主键列的值;

不在主键列中使用可能会更改的值。(例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,必须更改这个主键。)

2.使用Mysql

在CMD中键入mysql -uroot -p

 

进入mysql状态,接下来需要键入密码

 

命令输入在 mysql> 之后;

命令用 ; 或 \g 结束,换句话说,仅按 Enter 不执行命令;

输入 help 或 \h 获得帮助,也可以输入更多的文本获得特定命令的帮助(如,输入 help select 获得使用SELECT语句的帮助);

输入 quit 或 exit 退出命令行实用程序。

2.1 关键字

MySQL中同样具有关键字。如:ues, show, SELECT等等(cmd中不区分大小写)

 

先举例一些基本的命令:

 

use + 名字(database);打开某数据库

show databases;返回可用数据库的一个列表

show tables;返回当前选择的数据库内可用表的列表

show columns from 名字(table);这个命令要求给出表名,返回表中的属性信息。它对每个字段返回一行,行中包含字段名、数据类型、是否允许NULL、键信息、默认值以及其他信息(如字段id的auto_increment)。此外,需要注意的是此命令等效于describe 名字(table)

举例:

 

 

 

什么是自动增量? 某些表列需要唯一值。例如,订单编号、雇员ID或(如上面例子中所示的)顾客ID。在每个行添加到表中时,MySQL可以自动地为每个行分配下一个可用编号,不用在添加一行时手动分配唯一值(这样做必须记住最后一次使用的值)。这个功能就是所谓的自动增量。如果需要它,则必须在用CREATE语句创建表时把它作为表定义的组成部分。我们将在第21章中介绍CREATE语句。

 

此外,相关的show命令还有:

 

 

 

MySQL 5支持一个新的INFORMATION_SCHEMA命令,可用它来获得和过滤模式信息。

 

2.2 检索语句(SELECT)

 

 

上述语句利用SELECT 语句从user 表中检索一个名为password的列。所需的列名在SELECT关键字之后给出,FROM关键字指出从其中检索数据的表名。如上的一条简单SELECT语句将返回表中所有行。数据没有过滤(过滤将得出结果集的一个子集),也没有排序

 

SQL语句和大小写 请注意,SQL语句不区分大小写,因此SELECT与select是相同的。同样,写成Select也没有关系。许多SQL开发人员喜欢对所有SQL关键字使用大写,而对所有列和表名使用小写,这样做使代码更易于阅读和调试。不过,一定要认识到虽然SQL是不区分大小写的,但有些标识符(如数据库名、表名、列名)可能不同:在MySQL 4.1及之前的版本中,这些标识符默认是区分大小写的;在MySQL 4.1.1版本中,这些标识符默认是不区分大小写的。最佳方式是按照大小写的惯例,且使用时保持一致。MySQL8.0中不区分,但是可根据自己的情况进行调整。

 

检索多个列:

 

 

唯一的不同是必须在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。

 

检索所有列:

SELECT * FROM 表名,为检索所有列。优点:能检索出名字未知的列。缺点:如果不是确定需要所有列的信息,使用通配符*讲会降低检索和应用程序的性能。

 

检测不同的行:

解决办法是使用DISTINCT关键字,顾名思义,此关键字指示MySQL只返回不同(唯一)的值。

 

 

 

实际上type中有多个重复的0,1,2行。

 

限制结果

 

 

此语句使用SELECT语句检索单个列。LIMIT 5指示MySQL返回不多于5行。

 

其中,LIMIT后若跟两个数字,如:5,5,则指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数。

 

带一个值的LIMIT总是从第一行开始,给出的数为返回的行数。带两个值的LIMIT可以指定从行号为第一个值的位置开始。

 

值得注意的是:

 

检索出来的第一行为行0而不是行1。因此,LIMIT 1,1 将检索出第二行而不是第一行。

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

此外,LIMIT还有一种表示方法: LIMIT 10,5等效于 LIMIT 5 OFFSET 10第一个数字为检索的行数,第二个数字为偏移量即开始的位置。

 

完全限定

有一些情形需要完全限定名,例如:使用完全限定的名字来引用列(同时使用表名和列字)。表名也可以是完全限定的。(community是数据库,user为其中一个表,id为user中的一个列)

 

 

 

2.3 排序检索

2.2部分检索出的数据并不是以纯粹的随机顺序显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示。这可以是数据最初添加到表中的顺序。但是,如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存储空间的影响。因此,如果不明确控制的话,不能(也不应该)依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。

 

在这里新介绍一个概念,子句:SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。子句的例子有SELECT语句中的FROM子句。

 

为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。请看下面的例子:

 

 

 

这条语句除了指示MySQL对 email 列以字母顺序排序数据的ORDER BY子句外,与前面的语句相同。也可用其他列进行排列之后显示email字段。

 

按多个列排序

如下所示,先对 type 字段进行排序。之后在 type 相同的行中,对 username 字段进行排序。若 type 均不同,则不会对 username 进行排序。

 

 

 

指定排序方向:数据排序不限于升序排序(从A到Z)。这只是默认的排序顺序,还可以使用ORDER BY子句以降序(从Z到A)顺序排序。为了进行降序排序,必须指定DESC关键字。

 

 

 

注意:对哪个列进行降序排列,就需要在列后加 DESC ,ORDER BY默认是升序,关键字为 ASC

 

在对文本性的数据进行排序时,A与a相同吗?a位于B之前还是位于Z之后?这些问题不是理论问题,其答案取决于数据库如何设置。

在字典(dictionary)排序顺序中,A被视为与a相同,这是MySQL(和大多数数据库管理系统)的默认行为。但是,许多数据库管理员能够在需要时改变这种行为(如果你的数据库包含大量外语字符,可能必须这样做)。

 

 

 

注意,使用的时候,LIMIT要放在ORDER BY之后,否则会报错。

 

2.3部分学习了如何用SELECT语句的ORDER BY子句对检索出的数据进行排序。这个子句必须是SELECT语句中的最后一条子句。

 

2.4 过滤数据(WHERE)

过滤数据,即指定数据的搜索条件,毕竟在实际应用中检索所有数据的情况是不多的。

 

 

 

在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出。这个例子采用的是相等测试:它检查一个列是否具有指定的值,据此进行过滤。但是SQL允许做的事情不仅仅是相等测试。

 

在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误

 

 

 

值得注意的是,

 

 

 

MySQL在执行匹配时默认不区分大小写,所以system与SYSTEM匹配。

 

范围值检查

为了检查某个范围的值,可使用BETWEEN操作符。其语法与其他WHERE子句的操作符稍有不同,因为它需要两个值,即范围的开始值和结束值。

例如,BETWEEN操作符可用来检索id在11和22之间的所有用户名。

 

 

 

从这个例子中可以看到,在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。

 

空值检查

在创建表时,表设计人员可以指定其中的列是否可以不包含值。在一个列不包含值时,称其为包含空值NULL。

 

NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同

 

 

 

组合WHERE子句

为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。

 

操作符(operator) 用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符(logical operator)

 

接下来介绍几个操作符:

 

AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。

 

OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行。

 

在这里值得注意的是SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。优先级不同,需要记住。

你可能感兴趣的:(mysql)