初识MySql

数据库介绍

   咱们以前使用的数据都是存储在内存中的!好比说咱们写一个注册功能。mysql

咱们首先须要在内存中建立一个对象,以后输入注册须要的用户名和密码等数据!linux

而后登录时,输入注册的数据便可完成登录!sql

 

  注册成功以后  好比用户名是admin 密码是123456数据库

 

出现的问题:windows

请问安全

01.用户的数据放在哪里了?服务器

02.若是放在内存中,下次登录还使用以前注册的用户名和密码,能登录吗?数据结构

  显然是不能的! 由于程序一旦运行完毕,内存中的数据也随之消失!分布式

 

怎么办?性能

01使用序列化保存对象到文件中

02.使用xml保存数据到文件中

 

   可是把大量的数据放在文件中,咱们对文件数据的读写效率是相对较慢的!

并且也不便于咱们管理文件中的数据!这时候就须要有新的存储方式来代替!

就是咱们所谓的数据库(存储数据的仓库)!

  什么是数据库

 定义  按照数据结构来组织 储存和管理数据的仓库,咱们称之为数据库Database(DB)

这些存储的数据能够是多种形式 如文字 符号 图片 视频 音频等

 

从广义上来讲 咱们的txt文件 word文档 excel文件 均可以理解成一个数据库

在it的世界里数据库指的是有专业技术团队开发的用于存储数据的软件系统

 

使用 数据库的必要性

一、能够结构化的存储大量的数据信息 方便用户进行访问和操做数据库能够对数据进行分类保存 提升咱们的访问效率

二、能够保证数据信息的一致性 完整性 下降数据的冗余

数据库中有事务(ACID特性)来保证数据信息的一致性 完整性 

数据库自身也有有数来下降数据的冗余

ps 数据冗余 (redundance)数据重复的现象

三、能够知足应用的安全和共享方面的要求

 若是咱们把员工的全部信息 都保存在一个txt文件中 那么员工的薪水就会暴露出来 很显然这是不容许的

若是把数据放在数据库中 咱们能够限制只有财务人员才能查询薪水 而其余员工只能查询本身的信息

 

常见的关系型数据库

一、sql server

  是microsoft公司的关系型数据库管理系统

二、Mysql  

  是一种开放源代码的关系型数据库管理系统

三、Oracle

   是Oracle公司的关系型数据库管理系统

ps 虽然数据不同 可是对数据库的操做都大同小异 有的操做命令都是一致的

关系型数据库:是指创建在关系模型基础上的数据库 借助于集合代数等数学概念和方法来处理数据库的数据

 

 

关系型数据库与菲关系型数据库

常见的非关系型数据库  Mongo DB  Redis  HBase

在关系模型中 数据结构表示为一个二维表 一个关系就是一个二维表(但不是任意一个二维表都能表示一个关系),二维表就是关系名表中的第一行一般称为属性名,表中的每个元组和属性都是不可再分的 且元组的次序是可有可无的

  经常使用的关系术语如:

  记录  二维表中每一行称为一个记录  即元组

  字段  二维表中每一列称为一个字段  即属性

  域     属性的取值范围

 

二者的优缺点

  关系型数据库

  一、容易理解 存放在数据库中的数据就是以二维表的形式存储的

ps  二维表就是有行和列组成的 知道行号和列号就能定位到表中的数据 excel就是二维表

  二、使用方便 基于通用的sql语言使用操做关系型数据库方便

  三、支持sql 因此能够进行复杂的查询

  四、易于维护 丰富的完整性(域完整性 实体完整性 擦找完整性和自定义完整性)

大大下降了数据冗余 事务的ACID特性保证了数据的一致性

 

 

  五、读写性能低

  六、对海量数据的处理不如菲关系型数据库

  七、分布式不够完善

 

  非关系型数据库

  一、不支持sql 省去了解析sql的步骤 读写性能高

  二、基于键值对的形式 数据没有耦合性 扩张性强

  三、能够实现数据的分布式处理

  四、适用于海量数据的处理

  

  五、持久化性能低

  六、由于没有事务 因此数据安全性不高

  七、出道时间短 功能没有关系型数据库完善

 

  关系型数据库的不足

  不擅长处理:

  一、大量数据的写入处理

  二、为有数据更新的表作索引或表结构(schema)变动

  三、字段不固定时应用

  四、对简单查询须要快速返回结果的处理

-----大量数据的写入处理

  读写集中在一个数据库上让数据库不堪重负 大部分网站已使用主从复制技术实现读写分离 以提升读写性能和毒库的可扩展性

  因此在进行大量数据操做时 会使用数据库主从模式 数据的写入有主数据库负责 数据的读入由从数据库负责 能够比较简单的经过增长从数据来实现规模化 可是数据的写入却彻底没有简单的方法来解决规模化问题

  第一 要想将数据的写入规模化 能够考虑把主数据库从一台增长到2台 做为互相关联复制的二元主数据库使用 倒是这样能够把每台主数据库的复合减小一半 可是更新处理会发生冲突 可能会形成数据的不一致 为了不这样的问题 须要把对每一个表的请求分别分配给合适的主数据库来处理

 

  第二 能够考虑把数据库分割开来 分别放在不一样的数据库服务器上 好比讲不一样的表放在不一样的数据库服务器上 数据库分割能够减小每台数据库服务器上的数据量 一边减小影片io的输入 输出处理 实现内存上的高速处理 可是因为分别储存不一样服务器上的表之间没法进行join处理 数据库分割的时候就须要预先考虑这些问题 数据库分割以后 若是必定要进行Join处理 就必需要在程序中进行关联 这是很是困难的

为有数据更新的表作索引或表结构变动

  在使用关系型数据库时 为了加快查询速度须要建立索引 为了增长必要的字段就必定要改变表结构为了进行这项处理 须要对表进行共享锁定 这期间数据变动 更新 插入 删除等都是没法进行的

若是须要进行一些耗时操做 例如为数据量比较大的表建立索引或是变动其表结构 就须要特别注意 长时间内数据可能没法进行更新

字段不固定的应用

  若是字段不固定 利用关系型数据库也是比较困难的 有人会说 须要的时候价格字段就能够了 这种方法不是不能够 可是实际运用中每次都进行反复的表结构变动是很是痛苦的 你也能够预先设定大量的预备字段 可是这样的话 时间一长很容易弄不清楚字段和数据的对应状态 即哪一个字段保存有哪些数据

对简单查询须要快速返回结果的处理 (没有复杂的查询条件)

  这一点称不上是缺点 但无论怎样 关系型数据库并不擅长对简单的查询快速返回结果 由于关系型数据库是使用专门的sql语言进行数据读取的 他须要对sql语言进行解析 同时还要对表的锁定和解锁等这样的额外开销 这里并非说关系型数据库的速度太慢 而只是想告诉你们若但愿对简单查询进行告诉处理 则没有必要非食用关系型数据库不可

 

 

Mysql数据库的特色

  版本分:社区(自由免费下载)和企业(不能自由下载 收费 官方提供了完整的技术支持 适合对数据库要求比较高的企业用户)

  优势

    一、运行速度快 mysql体积小 命令执行速度快

    二、食用成本低 mysql免费开源(大多数人)

    三、易学易用 相对来讲(设置 管理)

    四、可移植性强 可以运行在windows linux unix 等多系统中

    

数据库管理系统和数据库系统 

  数据库管理系统DataBase Management System (DBMS)

  数据库系统DataBase System (DBS)数据库和数据库管理员

  数据库管理员DataBase Administrator(DBA)建立 监控 维护数据库的专业管理人员

  数据库DataBase

 

ps 关系型数据库管理系统(Relational DataBase Management System)

 

数据库以表格形式出现 

每行为各类记录名称

没列为各类记录所对应的数据域

许多的行和列组成一张表单

若干的表单组成database

 

数据库中相关的名词

数据库 数据表的集合

数据表 数据的集合

行 一行数据(元组或记录)横向

列 一列数据(字段)纵向

主键(Primary key):惟一标示数据的字段

外键(Foreign key):关联两个表之间关系的字段

标识列是自增列

主键是惟一

复合主键

  所谓的复合主键 就是指你表的主键含有一个以上的字段组成 不适用无业务含义的自增id做为主键

  create table test(

id number

value varchar(10),

primary key(name,id))

 

上面的name和id字段组合起来就是你test表的复合主键 他的出现是由于你的name字段可能会出现重名 因此要加上ID字段这样就能够保住你记录的惟一性 通常状况下 主键的字段长度和字段数目越少越好

 

其实“主键是惟一的全部”这句话是有歧义的 在表中建立了一个ID字段 自动增加 并设为主键 这个是没有问题的 由于主键是惟一的索引 ID自动增加保住了惟一性 能够

可是咱们再建立一个字段name 类型为varchar 也设置为主键 你会发现 在表的多行中 你是能够填写相同的name值的 这岂不是有违 主键是惟一的索引 !

当表中只有一个主键时!他是惟一的索引 当表中有多个主键时 称为复合主键 复合主键联合保证惟一索引

为何自增加ID已经能够做为惟一标识的主键 为啥还须要复合主键呢 由于 并非全部的表都要有ID这个字段 好比 咱们建一个学生表 没有惟一能标识学生的ID 怎么办呢 学生的名字 年龄 班级 均可能重复 没法使用单个字段来惟一标识 这时 咱们能够将多个字段设置为主键 造成复合主键 这多个字段联合标识惟一性 其中 某几个主键字段值出现重复是没有问题的 只要不是有多条记录的全部主键值彻底同样 就不算重复

 

数据完整性 

  存储在数据库中的全部数据值均正确的状态 若是数据库中存储有不正确的数据值 则该数据库称为已丧失数据完整性

组成部分

  一、实体完整性(Entity Integrity)

  二、域完整性(Domain Integrity)

  三、参照完整性(Referential Integrity)

  四、用户自定义完整性(User Defined Integrity)

相关文章
相关标签/搜索