目录:
一. 数据库介绍
1、什么是数据库?
- 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API(接口)用于创建,访问,管理,搜索和复制所保存的数据
- 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量
- 所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
- 1)数据以表格的形式出现
- 2)每行为各种记录名称
- 3)每列为记录名称所对应的数据域
- 4)许多的行和列组成一张表单
- 5)若干的表单组成database
2、rdbms 术语
- 数据库: 数据库是一些关联表的集合。
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格
- 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
- 行: 一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
- 冗余: 存储两倍数据,冗余可以使系统速度更快
- 1)查询时可能经常需要在多个表之间进行连接查询;而进行连接操作会降低查询速度
- 2)学生的信息存储在student表中,院系信息存储在department表中,如果要查询一个学生所在系的名称,必须从student表中查找学生所在院系的编号,然后根据这个编号去department查找系的名称
- 3)如果经常需要进行这个操作时,连接查询会浪费很多的时间,因此可以在student表中增加一个冗余字段dept_name,该字段用来存储学生所在院系的名称(这样就不用每次都进行连接操作了)
- 主键: 主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据
- 外键: 外键用于关联两个表(两个表通过都有的一个字段连接起来了)
- 复合键: 复合键(组合键)将多个列作为一个索引键,一般用于复合索引
- 索引: 使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
- 1)当某个字段设置为索引后,就会将此字段中所有值对应自己的md5
- 2)当从数据库查询时可以通过二分法等算法快速查找到这个条目
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体
3、Mysql数据库特点
- Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一
- 由瑞典MySQL AB公司开发,目前属于Oracle公司
- MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性
- 1) Mysql是开源的,所以你不需要支付额外的费用
- 2) Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库
- 3) MySQL使用标准的SQL数据语言形式
- 4) Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言
- 5) MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB
- 6) Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统
4、主键、外键、索引比较
1. 主键与外键区别
- 主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
- 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。 比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键
2. 主键与唯一索引区别
- 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
- 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
- 唯一性索引列允许空值,而主键列不允许为空值。
- 主键可以被其他表引用为外键,而唯一索引不能。
- 一个表最多只能创建一个主键,但可以创建多个唯一索引。
- 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。
5、MySQL常用的数据类型
二. 视图
1、什么是视图
- 1)视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】
- 2)用户使用时只需使用视图【名称】即可获取结果集,并可以将其当作表来使用
- 3)视图通常用在对某个结果查询的非常频繁,那么就可以使用视图虚拟出一张表,将这个查询结果放到这个视图中,以后我们仅仅对这个视图就行查询是对上面结果的查询
- 4)如果原表数据改变那么视图中的值也会随着改变,视图中的数据修改也会影响原表中数据
- 5)一下几种情况视图中数据无法改变:
- a. 视图中的列不在原表中(比如视图中查询时取得别名列:商品平均价格)
- b. 视图中的那个数据对应原表中多个数据时也无法修改
2、为什么要有视图?
- 1)可以简化查询
- 2)可以进行权限限制(将一部分列放到视图中让其他人操作)
- 3)大数据分表时可以用到
3、视图例子
- 1)比如现在我们有一张商品表,表中有许多字段,现在我们需要经常查询商品价格和名称这两个字段
- 2)并且我们只想显示这个表中价格大于100的所有商品
- 3)那么我们就可以创建一个视图good_price,然后将需要查的指定信息存储到这个视图中
#1 创建视图good_price
- create view good_price as select name,price from goods where price > 100;
#2 修改视图
- alter view good_price as select name,price from goods where price > 300;
#3 删除视图
- drop view good_price;
三. 触发器
1、什么是触发器
- 1)对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时,可以使用触发器
- 2)触发器用于定制用户对表的行进行【增/删/改】前后的行为
- 3)触发器只能对永久表使用,不能对临时表 创建
- 4)MySQL对同一表相同触发时间的相同触发事件,只能定义一个触发器
2、创建触发器使用语法
1. 创建触发器基本语法
Create trigger 触发器名
{before | after} #insert,update,delete之前还是之后触发
{insert | update | delete} #触发的事件是什么
On 表明 for each row 要出发的SQL语句:
2. 触发器使用举例
说明:创建一个触发器t1每次向data表中插入一条数据后就计算一下插入后的新表中数据条目数放到total表
Create trigger t1 #创建触发器名称是:t1
after #在下面插入语句insert之后执行这个触发器
insert #指定只有当执行insert语句才会触发
on data for each row #指定是对表data执行每行都会执行触发器update操作
update total set count=char_length(NEW.name) #指定触发的事件即执行这条SQL语句
3、删除触发器
- DROP TRIGGER t1;
4、使用触发器
- 触发器无法由用户直接调用,而是由于对表的【增/删/改】操作被动引发的