文章目录
第一章 数据库和SQL
1 数据库基础
(1) 什么是数据库
数据库:保存有组织的数据的容器(通常是一个文件或一组文件)
数据库是一个以某种有组织的方式存储的数据集合,可以将其想象成一个文件柜,此文件柜是一个存放数据的物理位置,不管数据是什么及如何组织的
数据库软件 DBMS即数据库管理系统,数据库是通过DBMS创建和操纵的容器,数据库是什么东西并不重要,我们使用的是DBMS,通过它访问数据库
(2) 表
表:某种特定类型数据的结构化清单,表是一种结构化的文件,可用来存储某种特定类型的数据
表可以保存顾客清单,产品目录等,存储在表中的数据是一种类型的数据或一个清单,绝不应该将顾客的清单和订单货物的清单存储在同一个数据库表中。数据库中每个表都有一个名字,用来标识自己,此名字是唯一的,这表示数据库中没有其它表具有相同的名字
表具有一些特性,这些特性定义了数据在表中如何存储,如可以存储什么样的数据,数据如何分解,各部分信息如何命名。描述表的这组信息就是所谓的模式,模式可以用来描述数据库中特定的表以及整个数据库和其中表的关系
模式:关于数据库和表的布局及特性的信息
(3) 列和数据类型
列:表中的一个字段,所有表都是由一个或多个列组成的
可以将数据库想象成一个网格,网格中每一列存储着一条特性的信息,如在顾客表中,一个列存储着顾客编号,另一个列存储着顾客名字
分解数据:正确地将数据分解成多个列极为重要,如城市,州,邮政编码等应该是独立的列,通过把它们分解,才有可能利用特定的列对数据进行排序和过滤,如果城市和州组合在一个列中,则按州进行排序或过滤会很困难
数据类型:所容许的数据的类型,每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。数据类型限制可存储在列中的数据种类(防止数值字段录入了字符值)
数据库中每列都有相同的数据类型,如果列中存储的为数字,那么相应的数据类型就该为数值类型,如果存储的是文本,日期等,则该用恰当的数据类型规定出来
(4) 行,主键
行:表中的一个记录
将表想象成网格,网格中垂直的列为表列,水平行则为表行,如顾客表可以每行存储一个顾客,表中的行数为记录的总数
主键:一列(或一组列),其值能够唯一区分表中每个行
表中每一行都应有可以唯一标识自己的一列(或一组列)。一个顾客表可以使用顾客编号列,而订单表可以使用订单ID
唯一标识表中每行的这个列(这组列)称为主键,主键用来表示一个特定的行,没有主键,更新或删除表中特定的行很困难,因为没有安全的方法保证只涉及相关的行
大多数数据库设计人员都应该保证他们创建的每个表具有一个主键,以便于以后的数据管理和操作
列作为主键的条件:
1,任意两行都不具有相同的主键值
2,每个行都必须具有一个主键值(主键列不允许NULL值)
主键的良好习惯:
1,不更新主键列中的值
2,不重用主键列的值
3,不在主键列中使用可能会更改的值
2 SQL
(1) 什么是SQL
SQL是结构化查询语言的缩写,SQL是一种专门与数据库通信的语言
设计SQL的目的是很好地完成一项任务,即提供一种从数据库中读写数据地简单有效地方法
SQL的优点:
1,SQL不是某个特定数据库供应商专用语言,几乎所有重要的DBMS都支持SQL,学习SQL几乎可以与所有的数据库打交道
2,SQL简单易学,它的语句全都是由描述性很强的英语单词组成
3,SQL是强有力的语言,灵活使用它,可以进行非常复杂和高级的数据库操作
SQL不是一种专利语言,但任意两个DBMS实现的SQL都不完全相同
第二章 MySQL简介
1 什么是MySQL
数据的所有存储,检索,管理和处理实际上由数据库软件–DBMS(数据库管理系统)完成的,MySQL是一种DBMS,即它是一种数据库软件
MySQL被广泛使用的原因:
1,MySQL是开源软件,一般可以免费使用
2,MySQL执行很快,且不断更新增加新功能
3,MySQL容易安装和使用
(1) 客户机-服务器软件
DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类为基于客户机-服务器的DBMS,前者(如Microsoft Access和FileMaker)常用于桌面用途,通常不用于高端或更关键的应用
MySQL,Oracle等数据库都是基于客户机-服务器的数据库,客户机-服务器应用分为两个不同的部分,服务器部分是负责所有的数据访问和处理的一个软件,这个软件运行在称为 数据库服务器的计算机上
与数据文件打交道的只有服务器软件,关于数据,数据增删查改的所有请求都是由服务器软件完成,这些请求来自运行客户软件的计算机,客户机是和用户打交道的软件
2 MySQL工具
MySQL是一个客户机-服务器DBMS,为了使用MySQL还需要有一个专门的客户机,给MySQL提供要执行的命令的一个应用
(1) mysql命令行实用程序
每个MySQL都有一个名为mysql的简单命令行程序:
mysql命令行几个要点:
1,命令在mysql>之后
2,命令用 ; 结束
3,输入help获得帮助
4,输入quit或exit退出
mysql命令行实用程序对于快速测试和执行脚本非常有价值
(2) Navicat for MySQL
Navicat for MySQL是一套管理和开发MySQL的理想解决方案,支持单一程序,这个功能齐备的前端软件为数据库管理,开发和维护提供了强大的图形界面
第三章 使用MySQL
1 简单使用MySQL
(1) 连接
MySQL与所有的客户机-服务器DBMS一样,要求在执行命令前登陆到DBMS,MySQL在内部保存自己的用户列表并赋予不同的权限
连接MySQL需要以下信息:
1,主机名,如是本地MySQL服务器,则为 localhost
2,端口,默认端口3306
3,一个合法的用户名
4,用户口令
(2) 选择数据库
连接到MySQL后,没有任何数据库打开供你使用,需要用 use 选择一个数据库
use语句并不返回任何结果,这里显示的 Database changed提示数据库选择成功,必须先使用use打开数据库,才能读取其中的数据
(3) 了解数据库和表
1,show databases; 返回数据库的一个列表
2,show tables; 返回当前选择数据库内的可用的列表
3,show columns from xxxx (xxxx代表选定数据库中的一个表名); / describe xxxx,它对每个字段返回一行,行中包括字段名,数据类型,是否允许null,键信息,默认值以及其它信息
4,其它常用show语句:
show status; //显示广泛的服务器状态信息
show create database; //显示创建特定数据库
show create table; //显示创建特定表
show grants; //显示用户的安全权限
show errors; //显示服务器错误
show warnings; //显示服务器警告信息
第四章 检索数据
1 SELECT 语句
SQL语句都是由简单的英语单词构成,这些单词称为关键字,每个SQL语句都是由一个或多个关键字构成的,最常使用的SQL语句就是 select 语句,它的用途是从一个或多个表中检索信息
使用select检索数据,至少必须给出两条信息:
1,想选择什么,2,从什么地方选择
(1) 检索单个列
上述语句利用select语句从products表中检索了一个名为prod_name的列,所需的列名在select之后给出,from关键字指出从其中检索数据的表名
这样的一条select语句返回表中单列的所有行,数据没有过滤也没有排序
注意:
1,多条SQL语句必须以 ,分隔,使用mysql命令行,必须加上 ; 来结束
2,SQL语句不区分大小写,许多专业开发者对所有的SQL关键字使用大写,对所有的列和表名使用小写,这样更容易阅读和调试
3,在处理SQL语句时,空格会被忽略,一条语句可以写在多行
(2) 检索多个列
想从一个表中检索多个列,使用相同的select语句,在select语句后给出多个列名,列名间以 , 分隔,select语句以 ; 结束
(3) 检索所有列
select语句还可以检索所有的列而不必逐个列出它们,通过 * 通配符完成
select语句使用通配符,则返回表中的所有列,列的顺序一般是列在表定义中出现的顺序,但有时表的模式的变化(添加,删除列)可能导致顺序变化
(4) 检索不同的行
select每次返回所有匹配的行,如果不想让每个值每次都出现,可以使用 distinct(译:截然不同的),使用此关键字可以指示MySQL只返回不同的值
select distinct vend_id告诉MySQL只返回不同(唯一的vend_id行),因此只返回4行,distinct应该用于所有列而不仅是前置它的列
(5) 限制结果
select语句返回所有匹配的行,为了返回第一行或前几行,可以使用 limit 子句来限制检索结果
为了得到下一个5行,可指定要检索的开始行和行数,limit子句后第一个数为开始位置,第二个数为要检索的行数
使用limit子句的注意点:
1,带一个值得limit总是从第一行开始,检索出来得第一行为行0而不是行1
2,检索时超出表中指定行,行数不够时MySQL只返回它能返回得那么多行
(6) 使用完全限制的表名
以上的所有SQL语句只通过列名引用,也可以使用完全的名字来引用列
有一些情况下需要完全限定表名,表名和列名都可以是完全限定的