什么是数据库

   1. 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同
     的API(接口)用于创建,访问,管理,搜索和复制所保存的数据
 2. 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据
    库管理系统(RDBMS)来存储和管理的大数据量
 3. 所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
 4. RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
    1)数据以表格的形式出现
    2)每行为各种记录名称
    3)每列为记录名称所对应的数据域
    4)许多的行和列组成一张表单
    5)若干的表单组成database

  2、RDBMS 术语
      1. 数据库: 数据库是一些关联表的集合。
      2. 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格
      3. 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
      4. : 一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

      5. 冗余: 存储两倍数据,冗余可以使系统速度更快
          1)查询时可能经常需要在多个表之间进行连接查询;而进行连接操作会降低查询速度
          2)学生的信息存储在student表中,院系信息存储在department表中,如果要查询一个学生所在系的名
               称,必须从student表中查找学生所在院系的编号,然后根据这个编号去department查找系的名称
          3)如果经常需要进行这个操作时,连接查询会浪费很多的时间,因此可以在student表中增加一个冗余
                字段dept_name,该字段用来存储学生所在院系的名称(这样就不用每次都进行连接操作了)

      6. 主键: 主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据
      7. 外键: 外键用于关联两个表(两个表通过都有的一个字段连接起来了)
      8. 复合键: 复合键(组合键)将多个列作为一个索引键,一般用于复合索引
      9. 索引: 使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

          1) 当某个字段设置为索引后,就会将此字段中所有值对应自己的md5
          2) 当从数据库查询时可以通过二分法等算法快速查找到这个条目

      10. 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体

  3、Mysql数据库特点
      1. Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database
        Management System:关系数据库管理系统)应用软件之一
      2. 由瑞典MySQL AB公司开发,目前属于Oracle公司
      3. 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. 主键与外键区别

        1. 主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
            身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

        2. 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
            比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键

    2. 主键与唯一索引区别

        1. 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
        2. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
        3. 唯一性索引列允许空值,而主键列不允许为空值。
        4. 主键可以被其他表引用为外键,而唯一索引不能。
        5. 一个表最多只能创建一个主键,但可以创建多个唯一索引。
        6. 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。


视图

  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. 使用触发器
      触发器无法由用户直接调用,而是由于对表的【增/删/改】操作被动引发的


事物

  1、事务的介绍

            1)事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元。

  2、事务的使用场景
       1)在日常生活中,有时我们需要进行银行转账,这个银行转账操作背后就是需要执行多个SQL语句,假
          如这些SQL执行到一半突然停电了,那么就会导致这个功能只完成了一半,这种情况是不允许出现,
          要想解决这个问题就需要通过事务来完成。

  3、事务的四大特性
      原子性:
        一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么
        全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性
      一致性:
        数据库总是从一个一致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,即
        使在转账过程中系统崩溃,支票账户中也不会损失200美元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。)
      隔离性:
        通常来说,一个事务所做的修改操作在提交事务之前,对于其他事务来说是不可见的。(在前面的例
        子中,当执行完第三条语句、第四条语句还未开始时,此时有另外的一个账户汇总程序开始运行,则
        其看到支票帐户的余额并没有被减去200美元。)
      持久性:
        一旦事务提交,则其所做的修改会永久保存到数据库。
        说明:事务能够保证数据的完整性和一致性,让用户的操作更加安全。

  4、事务的定义 (作用是可以撤销begin后面执行的命令)

      1)MySQL 事务主要用于处理操作量大,复杂度高的数据。

      2)在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等

      3)这样,这些数据库操作语句就构成一个事务!

      4)在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务

      5)事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行

      6)事务用来管理insert,update,delete语句

  5、事务是必须满足4个条件

      1、原子性:一组事务,要么成功;要么撤回

      2、稳定性: 有非法数据(外键约束之类),事务撤回

      3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回

      4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得,
                          innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。

  6、使用事务手动撤销对MySQL的操作

      mysql> begin; #开始一个事务

      mysql> insert into student(name,age,register_data) values("wangwu",99,"2016-06-20"); #执行一条命令

      mysql>rollback; #回滚 , 这样数据是不会写入的

      mysql> commit; #执行commit后命令执行结果是正真的写入硬盘了(rollback也无法撤回)

      MySQL数据库默认采用自动提交(autocommit)模式, 也就是说修改数据(insert、update、delete)的操 作会自动的触发事务,完成事务的提交或者回滚
      开启事务使用 begin 或者 start transaction; 事务 81
      pymysql 里面的 conn.commit() 操作就是提交事务
      pymysql 里面的 conn.rollback() 操作就是回滚事务

      注:当然如果上面的数据没问题,就输入commit提交命令就行

MySQL的简介的更多相关文章

  1. MySql 正则表达式简介及使用

    MySql正则表达式简介及使用 by:授客 QQ:1033553122 简介 正则表达式描述了一组字符串,该字符放置于REGEXP工具后面.作用是将一个正则表达式与一个文本串进行比较. 最简单的正则表 ...

  2. MySQL日志简介

    一.MySQL日志简介 二.错误日志 作用: 记录mysql数据库的一般状态信息及报错信息,是我们对于数据库常规报错处理的常用日志. 默认位置: $MYSQL_HOME/data/ 开启方式:(MyS ...

  3. 数据库----ORACLE和MYSQL数据库简介

    一.什么是数据库? 数据库(Database---DB)按照组织.储存和管理数据的仓库.(理解以下三个概念)   数据(Data)用来描述事物的记录都可称数据,如文字音乐图像.   数据库系统(Dat ...

  4. Linux中Mysql的简介和安装

    MySQL 简介 点击查看MySQL官方网站 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于Oracle旗 ...

  5. MySQL视图简介与操作

    1.准备工作 在MySQL数据库中创建两张表balance(余额表)和customer(客户表)并插入数据. create table customer( id int(10) primary key ...

  6. MySQL从删库到跑路(一)——MySQL数据库简介

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.MySQL简介 1.MySQL简介 MySQL是一个轻量级关系型数据库管理系统,由瑞典MySQL AB公司开发, ...

  7. mysql的简介和使用

    mysql简介 数据的所有存储,检索,管理和处理实际上是由数据库软件--DBMS(数据库管理系统)完成的 mysql是一种DBMS,即它是一种数据库软件 mysql工具 mysql是一个客户机-服务器 ...

  8. mysql 存储过程简介

    存储过程类似一个存储在数据库的一个数据库脚本.它类似一个方法,可以批量执行一些数据库的操作. 本文编写一个简单的存储过程来快速了解存储过程. 1.因为存储过程类似编程语言的方法,所以方法中可能会用到 ...

  9. mysql存储过程简介

    创建存储过程CREATE PROCEDURE productpricing(OUT pl DECIMAL(8,2),OUT ph DECIMAL(8,2),OUT pa DECIMAL(8,2))BE ...

  10. MySQL函数简介

    //将时间戳长整形数值转换为yyyy-MM-dd HH:mm:ss格式SELECT FROM_UNIXTIME(CREATE_TIME, '%Y-%m-%d %H:%i:%S') FROM TBLS ...

随机推荐

  1. GitHub项目绑定自己的域名

    github博客搭建:https://blog.csdn.net/walkerhau/article/details/77394659?utm_source=debugrun&utm_medi ...

  2. Ceph日常运维管理和排错 -- <7>

    Ceph日常运维管理 集群监控管理 集群整体运行状态 [root@cephnode01 ~]# ceph -s cluster: id: 8230a918-a0de-4784-9ab8-cd2a2b8 ...

  3. 谈谈Java的Collection接口

    目录 谈谈Collection 前言 Collection 方法 1.boolean add(E) 2.void clear() 3.boolean contains(Object o) 4.bool ...

  4. isStatic:检测数据是不是除了symbol外的原始数据

    function isStatic(value) { return( typeof value === 'string' || typeof value === 'number' || typeof ...

  5. RTC时间设置

    1.命令行输入date,查看系统时间. 2.命令行输入 date -s "2019-01-21 16:03:00" 修改系统时间. 3.命令行输入 hwclock -w 将修改后的 ...

  6. 今天我的jupyter notebook打不开了,报错原因'No module named 'zmq.eventloop'

    今天我的jupyter notebook打不开了,就是那种一打开出现黑色界面就退出的那种,惊恐爬上了我的面颊. 找了一个小时,试了好几种办法(包括别人说的什么把属性里面后面的%%的去掉)终究无果 打开 ...

  7. Activiti工作流引擎开发系列

    Activiti工作流引擎开发系列-01 作者:Jesai 没有伞的孩子,只能光脚奔跑! 前言: 初次接触工作流这个概念是自从2014年11月份开始,当时是由于我的毕业设计需要,还记得当时我毕业设计的 ...

  8. django restful 序列化

    https://www.cnblogs.com/wt7018/p/11456440.html https://www.cnblogs.com/wt7018/p/11530962.html

  9. DataFrame数据合并

    一.join 作用:默认情况下,他是把行索引相同的数据合并到一起注意:以左为准,没有的部分用NaN补全 例子 import pandas as pd import numpy as np df1 = ...

  10. JS前端时间格式化

    var dateTime = new Date(tree_time); tree_time = dateTime.getFullYear() + '-'+ (dateTime.getMonth()+1 ...