MySQL数据库(一)——基本介绍

(一)MySQL基本介绍:

MySQL目前属于Oracle甲骨文公司,MySQL称之为关系型数据库、微软的SQL Server。

MySQL数据库能够支持在多种操作系统上运行,包括Solaris、Mac OS、FreeBSD和Windows,Linux通通支持。核心功能就是处理数据,其中提供空间供数据存储又是其主要主要功能之一。

数据库一般也不直接面向数据存储,存储是交给表/索引这类对象完成的。

MySQL数据库是一种C/S模型(即客户端和服务端模型),客户端通过账号、密码来连接服务器,连接成功之后才可以进行数据库的操作(CRUD:增加、删除、变更、查询)。MySQL的服务端采用IO复用 + 可伸缩的连接池,实现了网络高并发的经典模型。

(二)MySQL的SQL语句类别划分:

(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。

(三)当默认配置好一套MySQL数据库服务后,系统会默认创建4个库:

(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:

Linux是操作系统内核(并不是一个完整的系统),上面运行着诸多GNU程序(GUN程序如今不仅运行在Linux环境上,UNIN/Windows上也都有),它们共同组合出一套可用的系统。FSF(Free Software Foundation,自由软件基金会)将这套组合定义为GNU/Linux,命名存在争议,有一部分Linux发行版采用了“GNU/Linux”的说法,更多企业和开发人员采用了“Linux”。

自由软件:

必须开放源代码,可以被自由地使用,不受限制地复制、研究、修改和发布。

 

你可能感兴趣的:(数据库MySQL)