数据库 mysql 学习笔记
基础阶段:数据库的基本操作(增删改查),以及一些高级操作(视图、触发器、函数、存
储过程等)
优化阶段:如何提高数据库效率、如索引,分表等
部署阶段:如何搭建真实的环境系统,如服务器集群,负载均衡
基础阶段
1. 什么是数据库?
数据库:database,存储数据的仓库。
数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存 RAM)
2. 数据库的分类?
数据库基于存储介质的不同:进行了分类,分为两类:关系型数据库(SQL)和非关系型数
据库(NoSQL:Not Only SQL,不是关系型的数据库都叫做非关系型数据库)
3. 不同的数据库阵营中的产品有哪些?
关系型数据库
大型:Oracle,DB2
中型:SQL_SERVER,Mysql
小型:access
非关系型数据库:memcahed,MongoDB,redis(同步到磁盘)
4. 两种数据库阵营的区别?
关系型数据库:安全(保存到磁盘基本不可能丢失)容易理解,比较浪费空间(二维表)
非关系型数据库:效率高,不安全(断电丢失)
关系型数据库
1. 什么是关系型数据库?
关系型数据库:是一种建立在关系模型(数学模型)上的数据库。
关系模型:一种所谓建立在关系上的模型,关系模型包含三个方面:
数据结构:数据存储的问题,二维表(有行和列)
操作指令集合:所有的 SQL 语句
完整性约束:表内数据的约束(字段与字段),表与表之间的约束(外键)
2. 关系型数据库的设计?
关系型数据库:从需要存储的数据需求中分析,如果是一类数据(实体)应该设计成一张二
1
维表:表是由表头(字段名:用来规定数据的名字)和数据部分组成(实际存储的数据单元)
二维表:行和列
表头
数据单元
字段名 1
数据 1
字段名 2
数据 2
以实际案例来进行处理:分析一个教学系统,教师负责教学,教学生,在教室教学生。
找出系统中所存在的实体:讲师表,学生表,班级表
找出实体中应该存在的数据信息
讲师:姓名,性别,年龄,工资
学生:姓名,性别,学号,学科
班级:班级名字,教室编号
关系型数据库:维护实体内部,实体与实体中间的联系
实体内部联系:每个学生都有姓名,性别,学号,学科信息
姓名
陈明
陈晶晶
王威
性别
男
女
男
学号
Itcast0001
Itcast0002
Itcast0003
学科
PHP
JAVA
UI
年龄
20
18
19
第二行的所有字段,都是在描述陈明这个学生(内部联系);第二列只能放性别(内部约束)
关系型数据库的特点之一:如果表中对应的某个字段没有值(数据),但是系统依然要分配
空间:关系型数据库 比较浪费空间
实体与实体之间的联系:每个学生肯定属于某个班级,每个班级一定有多个学生(一对多)
学生表
姓名
陈明
陈晶晶
王威
班级表
班级名称
PHP001
JAVA001
性别
男
女
男
学号
Itcast0001
Itcast0002
Itcast0003
学科
PHP
JAVA
UI
年龄
20
18
19
教师编号
B205
A203
解决方案:在学生表中增加一个班级字段来指向班级(必须能够唯一的找到一个班级信息)
性别
男
女
男
学号
Itcast0001
Itcast0002
Itcast0003
学科
PHP
JAVA
UI
年龄
20
18
19
班级名称
PHP001
PHP001
JAVA001
姓名
陈明
陈晶晶
王威
2
学生实体与班级实体的关联关系:实体与实体之间的关系
关键字说明
数据库:database
数据库系统:DBS(database system):是一种虚拟系统,将多种内容关联起来的称呼
DBS=DBMS+DB
DBMS:database management system ,数据管理系统,专门管理数据库
DBA::database administrator,数据库管理员
行/记录:row/record :本质是一个东西:都是指表中的一行(一条记录):行是从结构角
度出发,记录是从数据角度出发
列/字段:column/field,本质是一个东西
SQL
SQL :structured query language :结构化查询语言(数据以查询为主:99%是在进行查询操
作)
SQL 分为三个部分
DDL:data definition language :数据定义语言,用来维护数据的结构(数据库,表),
代表指令:create drop alter 等
DML:data manipulation language :数据操作语言,用来数据进行操作(数据表中的内
容),代表指令:insert ,delete,update 等;其中 DML 内部又单独进行了一个分类:DDL
(data query language:数据查询语言,如 select)
DCL:data control language ,数据控制语言,主要是负责权限管理(用户),代表指令:
grant,revoke 等
SQL 是关系型数据的操作指令,SQL 是一种约束,但不强制(类似 W3C)不同的数据库
产品(如 ORacle,mysql)可能内部会有细微的区别
Mysql 数据库
Mysql:数据库是一种 c/s 结构的软件:客户端/服务器。若想访问服务器必须通过客户端(服
务器一直运行,客户端在需要使用的时候运行)。
交互方式
3
1. 客户端连接认证:连接服务器,认证身份
2. 发送 SQL 指令
3. 服务器接受 SQL 指令:处理 SQL 指令:返回操作结果
4. 客户端接受结果:显示结果
5. 断开连接(释放资源:服务器并发限制):exit /quit/ \q
Mysql 服务器对象
没有办法完全了解服务器内部的内容;只能粗略的去分析数据库服务器的内部的结构。
将 mysql 服务器内部对象分成了四层:系统(DBMS)->数据库(DB)->数据表*(table)->
字段(filed)
4
SQL 基本操作
基本操作:CRUD
将 SQL 的基本操作根据操作对象进行分类:分为三类:库操作、表操作(字段)、数据操作
库操作
对数据库的增删改查
1. 新增数据库
基本语法
Create database 数据库名字 [库选项]
5
库选项:用来约束数据库,分为两个选项
字符集设定 : charset/character set 具体字符集(数据存储的编码格式):常用
字符集:GBK 和 UTF8
校对集设定:collate 具体校对集(数据比较的规则)
--双中划线:注释(单行注释),也可以使用#号
--创建数据库
Create database mydatabase charset utf8;
其中数据库名字不能用关键字(已经被使用的字符)或者保留字(将来可能会用到
的)
--创建关键字数据库
Create database database charset utf8;
如果非要使用关键字或者保留字,那么必须使用反引号(esc 键下面的键在英文状
态下的输出``)
--创建关键字数据库
Create database `database` charset utf8;
中文数据库是可以的,但是有前提条件,保证服务器能够识别(建议不用)
--创建中文数据库
Create database `中国` charset utf8;
6
如果有乱码,解决方案:告诉服务器当前中文的字符集什么
Set names gbk;
当创建数据库 SQL 语句执行之后,发生了什么?
1. 在数据库系统中,增加了对应的数据库信息
2. 会在保存数据的文件夹下:data 目录,创建一个对应数据库名字的文件夹
3. 每个数据库下都有一个 opt 文件:保存了库选项
7
查看数据库
1. 查看所有数据库
-- 查看所有数据库
Show databases;
2. 查看指定部分的数据库:模糊查询
Show databases like ‘pattern’;
%:表示匹配多个字符
_: 表示匹配单 个字符
--pattern 是匹配模式
-- 创建数据库
8