MySQL目前属于Oracle甲骨文公司,MySQL称之为关系型数据库、微软的SQL Server。
MySQL数据库能够支持在多种操作系统上运行,包括Solaris、Mac OS、FreeBSD和Windows,Linux通通支持。核心功能就是处理数据,其中提供空间供数据存储又是其主要主要功能之一。
数据库一般也不直接面向数据存储,存储是交给表/索引这类对象完成的。
MySQL数据库是一种C/S模型(即客户端和服务端模型),客户端通过账号、密码来连接服务器,连接成功之后才可以进行数据库的操作(CRUD:增加、删除、变更、查询)。MySQL的服务端采用IO复用 + 可伸缩的连接池,实现了网络高并发的经典模型。
(1)DDL(Data Definition Language,数据库定义语言):定义了不同的数据库、数据库表、列、索引等数据库对象的定义。
常用的SQL:create(创建)、drop(删除)、update(更新)和select(查询)。
(2)DML(Data Manipulation Language,数据操控语言):用于添加、删除、变更和查询数据库记录。
常用的SQL:insert(添加)、delete(删除)、update(更新)和select(查询)。
(3)DCL(Data Control Language,数据控制语言):控制不同数据库段直接访问和访问级别的语句。
常用SQL语句:grant、remove。
(1)information_schema:记录用户、表、视图等元数据信息。它是虚拟出来的库,是由MySQL实例创建和维护的,其对象都保存在内存中(在磁盘上找不到对应的物理存在,因为是虚拟的),用户也无法在该库中创建对象,root用户也不可以。对于该库用户唯一能做的事情就是查询。
(2)mysql:记录用户权限、帮助、日志等信息。
(3)performance_schema:MySQL服务性能指标库。
(4)test:测试库。
实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等,也可以是虚拟的,比如说“老师与学校的关系”。
属性:实体所具有的某一特性。属性是个逻辑概念,比如说“性别”是“人”的一个属性。在关系数据库中,属性又是一个物理概念,可以看做是“表的一列”。
元组:表中的一行就是一个元组。
分量:元组的某个属性值。在一个关系数据库中,它是一个操作原子,即关系数据库在做任何操作的时候属性是“不可分”的,否则就不叫关系数据库了。
码(键):表中可以唯一确定一个元组的某个属性(或者属性组)。如果这样的码不只一个,那么都叫候选码(候选键)。从候选码中挑一个出来做“老大”,这个码就是主码。
全码:如果一个码包含了所有属性,这个码就是全码。
主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。
非主属性:没有在任何候选码中出现过的属性就是非主属性。
外码:一个属性(或者属性组),它不是码,但是它是别的表的码,他就是外码。
(1)减少数据冗余(最主要的好处,其它好处因此附带 )
(2)消除异常(插入异常、更新异常、删除异常)
(3)让数据组织的更加和谐
(一)第一范式(1NF):每一列保持原子特征。
列是基本数据项,不能再进行擦缝,否则设计成一对多的关系。不满足第一范式不能称之为关系型数据库。
学生表(学号、用户名、性别、年龄、地址)
其中地址信息还可进行拆分,拆分改造后为:
学生表(学号、用户名、性别、年龄、地址ID)
地址表(地址ID、省、市、区)
(二)第二范式(2NF):属性完全依赖于主键(针对联合主键进行消除部分依赖)
1NF基础上,非主属性完全依赖于主键。如果不是依赖主键,应该拆分成新的主体,拆分成一对多的关系。
例如:
学生选课表(学生ID、学生姓名、学生性别、课程名称、课程成绩)
主键(学生ID、课程名称)
学生姓名——》学生ID——》部分依赖
学生性别——》学生ID——》部分依赖
课程成绩——》(学生ID、课程名称)——》完全依赖
拆分改造后:
学生表(学生ID、学生姓名、学生性别)——主键:学生ID
课程成绩表(课程ID、课程名字、学生ID、成绩)——主键:课程ID
键(课程ID、学生ID)
(三)第三范式(3NF):
2NF基础上,属性不依赖于其它非主属性(消除依赖传递)
学生表(学生ID、学生姓名、学生性别、学院名称、学院电话)——主键:学生ID
学生姓名——》学生ID
学生性别——》学生ID
学院电话——》学生ID——》查询学院——》查询学院电话
拆分改造后:
学生表(学生ID、学生姓名、学生性别、学院ID)——主键:学生ID
学院表(学院ID、学院名称、学院电话)——主键:学院ID
通过范式学习,应用范式越高表越多。
表多带来的问题:
(1)查询时需要连接多个表,增加了查询的复杂性。
(2)查询时需要连接多个表,降低了数据库查询的性能。
一般满足第三范式即可。
MySQL中的表对象是基于库维护的,即表是属于某个库的,库在表在。
Oracle中的表对象是基于用户的,属于创建该对象的用户所有,用户在表在。
MySQL数据库都是由多个数据库组成(一经创建,默认至少有4个)。
Oracle中的数据库则是一个整体。
Linux是操作系统内核(并不是一个完整的系统),上面运行着诸多GNU程序(GUN程序如今不仅运行在Linux环境上,UNIN/Windows上也都有),它们共同组合出一套可用的系统。FSF(Free Software Foundation,自由软件基金会)将这套组合定义为GNU/Linux,命名存在争议,有一部分Linux发行版采用了“GNU/Linux”的说法,更多企业和开发人员采用了“Linux”。
自由软件:
必须开放源代码,可以被自由地使用,不受限制地复制、研究、修改和发布。