下载链接:
MySQL软件下载,Win32选5.0,Win64选8.0。
链接:https://pan.baidu.com/s/12aPVtw18m1Poj1v4JMcgEQ
提取码:5gln
MySQL 客户端软件可视化管理软件HeidiSQL下载。
链接:https://pan.baidu.com/s/1CROHSaJWLq48Px4hde3mHQ
提取码:i7bp
备注:数据库命名FatBear。主机名(默认本机127.0.0.1),用户名(默认root)和密码(123456)。
SQL基础知识
1 数据库基础
1.1 什么是数据库
将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库(Database,DB),也即保存有组织的数据的容器。
用来管理数据库的计算机系统称为数据库管理系统 (Database Management System,DBMS)。
1.2 DBMS的种类
DBMS主要通过数据的保存格式(数据库的种类)来进行分类。
早期数据库类型主要有三种:
层次数据库 Hierarchical Database,HDB,最古老的数据库之一,把数据通过层次结构(树形结构)的文本方式表现出来的数据库;
网络式数据库 network database,以Web查询接口方式访问的数据库;
关系型数据库 Relational Database,RDB,采用了二维表格来组织数据的数据库。
而现在最常用的数据库模型主要是两种:关系型数据库和非关系型数据库。
1.2.1 关系数据库(Relational Database,RDB)
关系型数据库(RDB)把复杂的数据结构归结为简单的二元关系。
RDB诞生于1969年,是现今应用最广泛的数据库。同Excel表一样采用行和列组成的二维表来管理数据。同时,还使用专门的 SQL(Structured Query Language,结构化查询语言)对数据进行操作。
如无特殊说明,本书所提到的数据库以及 DBMS 都是指 RDBMS。
这种类型数据库的DBMS称为关系数据库管理系统(Relational Database Management System,RDBMS)。
代表性的RDBMS有:有 Oracle,SQL Server,DB2,PostgreSQL,MySQL。
1.2.2 NOSQL非关系型数据库
NoSQL数据库,即Not Only SQL,是传统关系型数据库的一个有效补充,主要指那些非关系型的、分布式的,且不局限于固定结构的数据库。
非关系数据库大都是针对一些特性的应用需求出现的。根据结构化方法和应用场景的不同,主要分为以下几类:
1) 键值存储系统(Key-Value Store,KVS)
单纯用来保存查询所使用的主键(Key)和值(Value)的组合的数据库。具有极高的并发读写性能。只能通过key查询。典型产品:Redis,Tokyo Cabint。
2)文档存储(Document-Oriented)
将以文档的形式存储。保证海量数据存储的同时,具有良好的查询性能。用类JSON格式进行存储。典型产品:MongoDB,CouchDB。
3) 对象数据库(Object Oriented Database,OODB)
把数据以及对数据的操作集合起来以对象作为单位进行管理。典型产品:db4o。
4) 列存储数据库
按列对数据进行存储。适用于数据压缩,对一个或几个字段进行查询的效率很高。典型产品:Hbase,Cassandra。
5) XML数据库(XML Database,XMLDB)
高效存储XML数据,并支持XML的内部查询语法。典型产品:BaseX。
6) 图数据库
图形关系的最佳存储模式。典型产品:Neo4j。
1.3 数据库的结构
数据库结构是指在计算机的存储设备上合理存放的相关联的有结构的数据集合的结构。
1.3.1 RDBMS的常见系统结构
使用RDBMS时候,最常见的是系统结构是客户端/服务器类型(C/S类型)这种结构。
服务器指的是用来接收其他程序发出的请求,并对该请求进行相应处理的程序(软件),或者是安装了此类程序的设备(计算机)。RDBMS 也是一种服务器。
与之相对,向服务器发出请求的程序(软件),或者是安装了该程序的设备(计算机)称为客户端。访问由RDBMS管理的数据库,进行数据读写的程序称为 RDBMS客户端。
RDBMS 客户端将想要获取什么样的数据,或者想对哪些数据进行何种变更等信息通过SQL 语句发送给 RDBMS 服务器。RDBMS 根据该语句的内容返回所请求的数据,或者对存储在数据库中的数据进行更新。
1.3.2 表的结构
关系数据库通过类似 Excel 工作表那样的、由行和列组成的二维表来管理数据。用来管理数据的二维表在关系数据库中简称为表(table,某种特定型数据的结构化清单)。 表存储在由RDBMS 管理的数据库中,如下所示。一个数据库中可以存储多个表。
根据SQL语句的内容返回的数据同样必须是二维表的形式,这也是关系数据库的特征之一。
行为单位进行数据读写。
2 什么是SQL
SQL是结构化查询语言(Structured Query Language)的缩写。SQL是一种专门用来RDB关系型数据库通信的语言。
国际标准化组织(ISO)为SQL 制定了相应的标准,以此为基准的 SQL 称为标准SQL,也被称为ANSI SQL。以下内容提到的主要是ANSI SQL。
2.1 SQL语句及其种类
SQL 用关键字、表名、列名等组合而成的一条语句(SQL 语句)来描述操作的内容。
关键字是指那些含义或使用方法已事先定义好的英语单词,存在包含“对表进行查询”或者“参考这个表”等各种意义的关键字。
根据对 RDBMS 赋予的指令种类的不同,SQL 语句可以分为以下三类。
DDL(Data Definition Language,数据定义语言)用来创建或者删除存储数据用的数据库以及数据库中的表等对象。包含以下几种指令:CREATE,创建数据库和表等对象;DROP,删除数据库和表等对象 ;ALTER, 修改数据库和表等对象的结构;
DML(Data Manipulation Language,数据操纵语言)用来查询或者变更表中的记录。包含以下几种指令:SELECT,查询表中的数据 ;INSERT,向表中插入新数据;UPDATE,更新表中的数据 ;DELETE,删除表中的数据;
DCL(DataControlLanguage,数据控制语言)用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对 RDBMS的用户是否有权限操作数据库中的对象(数据库表等)进行设定。DCL 包含以下几种指令:COMMIT, 确认对数据库中的数据进行的变更;ROLLBACK,取消对数据库中的数据进行的变更 ;GRANT,赋予用户操作权限 ;REVOKE, 取消用户的操作权限。
实际使用的 SQL 语句当中有 90% 属于 DML。
2.2 SQL的基本书写规则
书写SQL 语句时必须要遵守一些规则。
SQL语句要以分号(;)结尾, 一条SQL 语句可以描述一个数据库操作。
SQL语句不区分关键字的大小写,插入到表中的数据区分大小写。
字符串和日期常数需要使用单引号(')括起来。 数字常数无需加注单引号(直接书写数字即可)。
2.3 表的创建
2.3.1 数据库的创建(CREATE DATABASE语句)
在创建表之前,一定要先创建用来存储表的数据库。CREATE DATABASE 语句的语法如下所示:
CREATE DATABASE <数据库名称>;
这里我们将数据库命名为 shop。
此外,数据库名称、表名以及列名都要使用半角字符(英文字母、数字、符号)。
2.3.2 表的创建(CREATE TABLE语句)
创建好数据库之后,接下来我们使用CREATE TABLE 语句在其中创建表。CREATE TABLE 语句的语法如下所示 :
CREATE TABLE <表名>
(<列名1> <数据类型> <该列所需约束>,
<列名2> <数据类型> <该列所需约束>,
<列名3> <数据类型> <该列所需约束>,
<列名4> <数据类型> <该列所需约束>,
...
<该表的约束1>, <该表的约束2>,……);
在数据库shop中创建商品表(Product 表)的CREATE TABLE 语句,如下所示。
2.4 命名规则
只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称。此外,名称必须以半角英文字母开头。
同一个数据库和同一个表中,名称不能重复。
2.5 数据类型的指定
数据类型(datatype)是指数据库所容许的数据的类型,包括数字型、字符型和日期型等。
每个表列都有相应的数据类型,它限制或容许该列中存储的数据。其中,数据类型及名称是SQL不兼容的主要原因。
Product 表所包含的列,定义在CREATE TABLE Product( ) 的括号中。列名右边的 INTEGER 或者CHAR 等关键字,是用来声明该列的数据类型的,所有的列都必须指定数据类型。 以下是四种基本的数据类型:
INTEGER型 用来指定存储整数的列的数据类型(数字型),不能存储小数。
CHAR型 CHARACTER(字符)的缩写,用来指定存储字符串的列的数据类型(字符型)。可以像 CHAR(10) 这样,在括号中指定该列可以存储的字符串的长度(最大长度)。字符串超出最大长度的部分是无法输入到该列中的。
VARCHAR型 VARCHAR 型用来指定存储字符串的列的数据类型(字符串类型),也可以通过括号内的数字来指定字符串的长度(最大长度)。但该类型的列是以可变长字符串的形式来保存字符串的 。定长字符串在字符数未达到最大长度时会用半角空格补足,但可变长字符串不同,即使字符数未达到最大长度,也不会用半角空格补足。
DATE型 用来指定存储日期(年月日)的列的数据类型(日期型)。
2.6 约束的设置
约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能。Product 表中设置了两种约束,NOT NULL 约束和主键约束约束。
2.6.1 NOT NULL 约束
Product 表的 product_id 列、product_name 列和 product_type 列的定义如下所示。
product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
数据类型的右侧设置了NOT NULL 约束。NULL 是代表空白(无记录)的关键字 。在 NULL 之前加上了表示否定的 NOT,就是给该列设置了必须输入数据的约束。
2.6.2 主键约束
所谓键,就是在指定特定数据时使用的列的组合。键种类多样,表中每一行都应该有可以唯一标识自己的一列(或一组列),而主键(primary key)就是用来表示一个特定的行 。
没有主键,更新或删除表中特定行将变得困难。
表中的任何列都可以作为主键,只要它满足以下条件。
1)任意两行都不具有相同的主键值;
2)每个行都必须具有一个主键值;(主键列不允许NULL值);
3)主键列中的值不允许修改或更新;
4)主键值不能重复使用。
在创建 Product 表的CREATE TABLE 语句的后面,还有下面这样的记述。
PRIMARY KEY (product_id)
这是用来给product_id 列设置主键约束的。如果把 product_id 列指定为主键,也就可以通过该列取出特定的商品数据了。 反之,如果向 product_id 列中输入了重复数据,就无法取出唯一的特定数据了。
2.7 表的删除和更新
2.7.1 表的删除(DROP TABLE语句)
删除表时使用的DROP TABLE语句
DROP TABLE <表名>;
删除的表是无法恢复的 ,只能重新创建。
2.7.2 表定义的更新(ALTER TABLE语句)
添加列的ALTER TABLE语句:
ALTER TABLE <表名> ADD COLUMN <列的定义>;
删除列的ALTER TABLE语句:
ALTER TABLE <表名> DROP COLUMN <列名>;
ALTER TABLE语句和DROP TABLE语句一样,执行之后无法恢复。 误添的列可以通过 ALTER TABLE 语句删除,或者将表全部删除之后重新再创建。
2.7.3 向Product表中插入数据
向Product表中插入数据 的 SQL 语句
START TRANSACTION;
INSERT INTO <表名> VALUES ('...', '...', '...', ..., ..., '...');
...
COMMIT;
2.7.4 转变表名
如果想把Poduct 表的名称变为Product,可以使用如下的指令:
RENAME TABLE < 变更前的名称 > to < 变更后的名称 >;