(共同学习,持续更新…)
数据库(database)保存有组织的数据的容器(通常是一个文件或者一组文件).
表(table) 某种特定类型数据的结构化清单。
模式(schema) 关于数据库和表的布局及特性的信息。
列(column) 表中的一个字段。所有表都是由一个或多个列组成的。
数据类型(datatype) 所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。
数据类型限制可存储在列中的数据种类,数据类型还帮助正确地排序数据,并在优化磁盘使用方面起重要的作用。因此,在创建表时必须对数据类型给予特别的关注。
行(row) 表中的一个记录。
表中的数据是按行存储的,所保存的每个记录存储在自己的行内。如果将表想象为网格,网格中垂直的列为表列,水平行为表行。
主键(primary key) 一列(或一组列),其值能够唯一区分表
主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。表中的任何列都可以作为主键,只要它满足以下条件:
(1)任意两行都不具有相同的主键值;
(2)每个行都必须具有一个主键值(主键列不允许NULL值)。
主键规则:
主键通常定义在表的一列上,但这并不是必需的,也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到构成主键的所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。
我们通常用数据库这个术语来代表他们使用的数据库软件。这是不正确的,数据库软件应称为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器。数据库可以是保存在硬设备上的文件,但也可以不是。在很大程度上说,数据库究竟是文件还是别的什么东西并不重要,因为你并不直接访问数据库;你使用的是DBMS,它替你访问数据库。
SQL 是结构化查询语言(Structured Query Language的缩写。SQL是一种专门用来与数据库通信的语言。
SQL不是某个特定数据库供应商专有的语言。几乎所有重要的DBMS都支持SQL,但事实上任意两个DBMS实现的SQL都不完全相同
数据的所有存储、检索、管理和处理实际上是由数据库软件——DBMS(数据库管理系统)完成的。MySQL是一种DBMS,即它是一种数据库软件。
MySQL的特点:成本低,开源免费;性能高,运行非常快;可信赖,操作简单.
客户机-服务器软件
DBMS可分为两类
一类为基于共享文件系统
的DBMS(包括诸如Microsoft Access和FileMaker),用于桌面用途,通常不用于高端或更关键的应用。
另一类为基于客户机—服务器
的DBMS。MySQL、Oracle以及Microsoft SQL Server等数据库是基于客户机—服务器的数据库。客户机—服务器应用分为两个不同的部分。服务器部分是负责所有数据访问和处理的一个软件。这个软件运行在称为数据库服务器的计算机上。
为进行所有数据库交互,客户机软件都要与服务器软件进行通信。关于数据、数据添加、删除和数据更新的所有请求来自运行客户机软件的计算机,客户机是与用户打交道的软件。例如,如果你请求一个按字母顺序列出的产品表,则客户机软件通过网络提交该请求给服务器软件。服务器软件处理这个请求,根据需要过滤、丢弃和排序数据;然后把结果送回到你的客户机软件。
MySQL的版本
MySQL的当前版本为版本5,下面是最近版本中引入的主要更改。
如前所述,MySQL是一个客户机—服务器的DBMS,因此,为了使用MySQL,需要有一个客户机,即你需要用来与MySQL打交道(给MySQL提供要执行的命令)的一个应用。
例如,
MySQL与所有客户机—服务器DBMS一样,要求在能执行命令之前登录到DBMS。MySQL在内部保存自己的用户列表,并且把每个用户与各种权限关联起来。
为连接数据库,需要以下信息:
主机名
(计算机名)——如果连接到本地MySQL服务器,为localhost;端口
(如果使用默认端口3306之外的端口);用户名
;在连接之后,你就可以访问你的登录名能够访问的任意数据库和表了。
数据库、表、列、用户、权限等的信息被存储在数据库和表中。
展示所有数据库:SHOW DATABASES;
选择数据库:USE 数据库名;
展示当前数据库的表:SHOW TABLES;
展示某个表的所有列:SHOW COLUMNS FROM 表名;
, DESCRIBE 表名;
SHOW COLUMNS要求给出一个表名(这个例子中的FROMcustomers),它对每个字段返回一行,行中包含字段名、数据类型、是否允许NULL、键信息、默认值以及其他信息。
显示广泛的服务器状态信息:SHOW STATUS;
、
其他SHOW语句:
检索单个列:SELECT 列名 FROM 表名;
SQL语句不区分大小写,因此SELECT与select是相同的。
在处理SQL语句时,其中所有空格都被忽略。SQL语句可以在一行上给出,也可以分成许多行。多行更容易阅读和调试。
检索多个列:SELECT 列名1,列名2 FROM 表名;
检索所有列:SELECT * FORM 表名;
除非需要每个列,一般不使用通配符*,检索不需要的列会减低检索和应用程序的性能
检索不同的行:SELECT DISTINCT 列名 FROM 表名;
去掉相同值,返回列中不同的值(一列名的行)
限制结果:SELECT 列名 FROM 表名 LIMIT 5;
用LIMIT关键字,返回前几行
也可以指定检索的开始行和需要检索的行数, LIMIT 2, 4 意思是从第2行开始, 返回4行。
LIMIT中指定要检索的行数为检索的最大行数。如果没有足够的行(例如,给出LIMIT 10, 5,但只有13行),MySQL将只返回它能返回的那么多行。
使用完全限定的表名:SELECT 表名.列名 FROM 表名;
也可以限定表名,SELECT 表名 列名 FROM 数据库名.表名;
子句(clause) SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字
和所提供的数据
组成。子句的例子有SELECT语句的FROM子句。为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句
。 ORDER BY子句取一个或多个列的名字。
输入:SELECT name FROM goods ORDER BY name
按照name的字母顺序排列数据。也可以通过非选择列进行排序,即ORDER BY后不是name也行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uzAZzOnd-1583773547358)(assets/1583772674648.png)]
输入:SELECT cate_id, price FROM goods ORDER BY cate_id, price;
多个列名之间用逗号隔开。仅在多个行具有相同的cate_id值时才对产品按price进行排序。如果cate_id列中所有的值都是不同的,则不会按照price排序。
降序排序,用DESC**关键字
输入:SELECT cate_id, price FROM goods ORDER BY price DESC;
在多个列上降序排序 如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。
1.与DESC相反的关键字是ASC(ASCENDING),默认升序,用不到ASC。
2.大小写例如A和a排序,取决于数据库如何设置。
ORDER BY和LIMIT的组合,能够找出一个列中最高或最低的值。
输入:SELECT price FROM goods ORDER BY price LIMIT 1;
RDER BY子句的位置 在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。
输入:SELECT name, price FROM goods where price=99;
在同时使用ORDER BY 和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将产生错误。
检查单个值,MySQL在执行匹配时默认不区分大小写
过滤条件WHERE子句小于(<)和不等于(<>或!=)
范围值检查,使用BETWEEN AND
**输入:**SELECT name, price FROM goods WHERE price BETWEEN 5000 AND 10000;
空值检查,IS NULL
NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同
SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。其语法如下:
SELECT name FROM goods WHERE price IS NULL;
操作符(逻辑操作符): AND 和 OR |
AND操作符:SELECT name, price cate_id FROM goods WHERE cate_id=1 AND price>3000;
检索cate_id为1,并且价格大于3000的商品。
OR操作符:SELECT name, price FROM goods where goods price=99 OR price=6888;
检索匹配任一条件就行。
计算次序:AND优先级大于OR
使用AND和OR操作符的WHERE子句,应该使用()明确的分组操作,消除歧义,不要依赖默认的计算次序。
SELECT name,price,cate_id FROM goods WHERE (cate_id=1 OR cate_id=2) AND price>3000;
操作符:IN |
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。当选项较多时,IN比OR更容易管理,且执行更快。
SELECT name, price, cate_id FROM goods WHERE cate_id IN (1, 2, 3);
操作符:NOT |
在WHERE子句中的NOT操作符有且只有一个功能,就是否认它之后所跟的任何条件。NOT可以对IN, BETWEEN和EXISTS子句取反
SELECT name, price, cate_id FROM goods WHERE cate_id NOT IN (1, 2, 3);