zoukankan      html  css  js  c++  java
  • 数据库

    一、mysql安装与介绍

    (一)概念介绍

    数据库:存储数据的仓库。对数据进行存储,并且提供增、删、改、查的数据操作。

    数据库建模:使用数据库来表达业务和业务的关系,数据建模成功与否决定了项目 的成败。

    业务逻辑:实体业务之间的关系,比如:养殖场,猪和饲养员的关系。

    事务:

    事务:是作为一个单元的一组有序的数据库操作,如果组当中所有操作都成功,则事务执行成功,如果有一个操作执行失败,则事务执行失败,回滚操作。

    事务的特性:

    原子性:事务包含的所有操作全部成功,要么全部失败回滚;成功必须完全应 用到数据库,失败则不能不能对数据库产生影响。

    一致性:事务执行前和执行后必须处于一致状态。

    隔离性:当多用户并发访问数据库时候,数据库为每一个用户开启一个事务, 这个事务不被其他事务操作干扰,多个并发事务直接互相隔离。

    持久性:一旦事务被提交了,那么数据库当中的数据改变是永久性的,即便数 据库系统发生故障,也不会丢失事务操作。

    事务的回滚:

    事务是用户定义的一组数据库操作。这些操作要么全做,要么全不做,回滚会自动是将该事务完成的操作撤销。

    数据库提供的四种隔离等级:

    如果我们不考虑隔离性,会导致

    脏读

    在一个事务处理的过程当中读取另一个没有提交的事务当中的数据,然后使用了数据。

    AB转账100元,A通知B查看账户,B发现已经到账,转账操作过程当中,事务发生问题,进行回滚,B再查账发现没有成功。

    不可重复读

    在一个事务之内,多次读取一条数据,这个事务没有结束,另一个事务也访问这个数据,第二个事务访问数据要对数据进行修改,那么一个数据两次事务读到的结果肯能不一样。

    幻读

    有两个事务,第一个操作所有的数据,第二个操作一条数据,第二个事务没有提交,第一个事务查看到的数据是之前的。

    以上的问题都处于数据库没有隔离性。

    隔离性的四个等级

    Read uncommited(读未提交),最低级别,任何情况都可以发生。

    Read commited(读已提交),可以避免脏读

    Repeatable read(可重复读),可以避免脏读,不可重复读的发生

    Serializable(串行化),可以避免脏读,不可重复读,幻读的发生

    数据库分类

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

    Oracle,db2,sqlserver,access,Mysql,sqlite

    非关系型数据库(nosql not only sql):key-value形式存储的文档数据库

    Redismongodb

    {“name”:”筑基丹”,”img”:[“1.jpg”,“1.jpg”,“1.jpg”]}

    (二)MYSQL数据库安装

    Mysql引擎

    数据库的引擎是用于存储,处理和保护数据的核心服务。利用数据库引擎可以控制访问权限并且快速的处理事务,利用数据库引擎创建连接事务处理。

    MySQL数据库引擎分类

    1ISAM  

    ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。

    2MYISAM

      MYISAMMYSQLISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的功能,MYISAM还使用一种表格锁定的机制,来优化多个并发的读写操作。其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MYISAM还有一些有用的扩展,例如用来修复数据库文件的MYISAMCHK工具和用来恢复浪费空间的MYISAMPACK工具。

      MYISAM强调了快速读取操作,这可能就是为什么MYSQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。

    3HEAP

    HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAMMYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。

    4INNODBBERKLEYDB

      INNODBBERKLEYDBBDB)数据库引擎都是造就MYSQL灵活性的技术的直接产品,这项技术就是MYSQL++ API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAMMYISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAMMYISAM引擎慢很多,但是INNODBBDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者或者两者,那你就要被迫使用后两个引擎中的一个了。

    数据库安装

    Python开发使用mysql数据库5.5版本以上(django2.0之后放弃mysql5.5之前的支持),在mysql版本当中5.7之前的版本都有.exe或者.msi的可执行安装文件,但是到5.7版本只有zip压缩包安装方法。

    1、下载安装包

    Mysql官网:

                        https://dev.mysql.com/downloads/

     

     

     

    2、编写安装配置文件(在5.7之前有自带,后来没有了)

    1、解压,不要解压到c盘,不要解压到中文目录

    2、解压完成,进入目录,编写my.ini

    先创建my.txt,写入配置

    然后保存,并修改后缀

     

    Mysql默认端口是3306

    Mysql默认编码是Latin1,我们需求修改为utf8

     

    3、执行安装命令

    首先进入解压目录下的bin目录。开始命令行(要以管理员身份开启)

    Shift+鼠标右键 -->在此处打开命令窗口

    开始 -> cmd --> 右键 -->以管理员身份运行

    使用cd切换bin目录下

    执行安装命令mysqld install

    执行激活命令mysqld --initialize-insecure --user=mysql

    执行成功

     

    4、配置环境变量并启动

    配置环境变量

     

     

     

    开启数据库

     

     

    效果如下:

     

    整个安装过程当中由于windows系统的环境确实导致安装失败,我们需要提前补充环境。

    错误1

    Windows文件缺失,网上下载文件包:

     

     

    将这个文件复制到

     

    错误2Mysql配置文件有问题

     

     

    错误3驱动缺

     

    解决方案,下载DirectX Repair

     

    从新启动电脑。

    错误3Cmd不是管理员身份

    错误4:路径错误

     

    手动创建data目录

    错误5:

     

    1、服务没有启动

    2、配置文件问题,对比配置文件,修改重启

    3、之前有过mysql残余。

    彻底删除mysql注册表

    运行“regedit”文件,如图,打开注册表

    删除注册表数据,通过regedit,删除以下几个文件【也可以在注册表里搜索mysql】:HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Applications/MySQL

    HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Applications/MySQL

    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Applications/MySQL

    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services一般服务会以相同的名字(名字通常是MySQL)在这里显

    删除mysql服务

    sc delete mysql

    (一)Mysql数据库基本认识与操作

    Mysql是一个数据库,但是我们安装的mysql数据库服务,服务就会有状态,启动,停止,重启。我们使用mysql必须保证mysql启动。

    使用mysql数据库需要连接数据库

    Mysql  -u  -p  -h

    -u 用户,默认有root用户,root用户是mysql数据库的管理员用户,拥有最高的权限。所以默认不允许远程登录root用户。

    -p 密码,用户对应的密码

    -h 主机,默认是localhost(127.0.0.1)代表本机,

    Mysql结构

    Mysql是数据库类型

    mysql当中,存放的

    Database 数据库

    Table

    Fieldcolumn) 字段

    Value

    对比officeExcel来看

    Mysql   --->     Excel

    Database    --->     file

    Table   --->     Sheet

    Field   --->     表头

    Value   --->     数据

    Sql语法规则

    1、分号结尾

    2、所有sql文档,系统变量大写

    3、Mysql本身大小写不敏感

    查询数据库命令

    SHOW DATABASES;

    创建数据库

    CREATE DATABASE school CHARSET=UTF8;

    使用数据库

    USE school

    查看表

    SHOW TABLES;

    CREATE TABLE student(id INT,name CHAR(32),age INT,major CHAR(32),class CHAR(32), phone CHAR(32)) CHARSET=UTF8;

    创建表格式

    CREATE TABLE tb_name(field FIELD_TYPE,) [CHARSET=UTF8];

    字段类型:

    Int

    TINYINT 微整数   1个字节  -128-127

    SMALLINT 小整数  2个字节

    MEDIUMINT 中等整数 3个字节

    INT  整数  4个字节       -2147483648-2147483647

    BIGINT 大整数 8个字节

    Float  4个字节

    Char 字符

    Varchar 字符

    Charvarchar 都需要指定长度,如果字符的长度不够char的长度,以空格填充,

    Varchar 按照字符的长度设定长度

    Char类型的字符串不可以用空格结尾

    Date  3字节  1998-12-21

    TIME 3字节 23:24:24

     插入语句

    查看表结构

    DESC student;

    插入数据

    INSERT INTO student(id,name,age,major,class,phone) VALUE(1," ",18,"python","0506","13331153360");

    Query OK, 1 row affected (0.01 sec)

    查询数据库数据

    SELECT 字段 FROM table_name;

    所有字段可以用*代替,在工作当中一般不允许用*

     SELECT * FROM student WHERE age=18;

    我们要搭建数据库描述学生与宿舍

    查询

    所有男生

    所有18以上的女生

    查询302宿舍的学生

    查询1

    一、数据库关联查询

    (一)数据库条件查询

    条件查询

    SELECT * FROM student WHERE age=18

    比较运算符

    > <=>= <=<>!=

    逻辑运算

    And

    Or

    Not

    模糊查询 SELECT * FROM student WHERE name LIKE “%”

    %pip 0到多个字符

    范围查询

    查询为空

    不为空

    排序

    SELECT * FROM student ORDER BY age;以年龄排序

    多条件排序,第一个条件为主排序条件

    排倒叙

    筛选和排序连用(先筛选再排序)

    子查询

    子查询是一种嵌套查询,将一个查询用小括号包围起来,然后作为下一个查询的结果,子查询必须有别名。

    SELECT nan.name FROM (SELECT name,age FROM student WHERE gender=”” ) AS nan WHERE age = 18;

    (二)数据库关系搭建

    数据库关系针对是多表之间的联系。

    一对一

    两个表的每条数据之间,存在唯一映射关系。

    举个栗子:

    用户登陆表              用户

    手机号             姓名

    验证码             身份证号

                                            头像

    邮箱

    手机号

    一对多

    将两个表分为一个一表,一个多表,一表当中数据可以对应多表当中的多条数据,多表当中的一条数据只能对应一表当中的一条数据。

    举个栗子:

    父亲(一表)                        儿子(多表)

    张三                         1

                                                     2

    Id                                      p_id

         

    这两张表通过parentid来关联

    查询老张的所有儿子

    查询李3的父亲

    多对多

    一个表当中数据可以对应另一个表当中的多条数据,反之亦然。

    专业 课程

    关系

    Python所有的课程

    包含计算机基础所有的专业

    父子id关系

    在商品类型当中会涉及到子类型

    举个栗子:

    服装

    男装

    中山装

    高级中山装

    Parent_id

     

    内连接查询(inner join

    查询两个表共有的数据,交集

    SELECT * FROM tb1 INNER JOIN tb2 ON 条件

    所有有宿舍的学员

    左表查询(左关联查询)(left join)

    查询两个表共有的数据,和左表所有的数据,左表有右表没有的部分用null代替

    SELECT * FROM tb1 LEFT JOIN tb2 ON 条件

    所有学员的住宿情况

    右表查询(右关联查询)(right join)

    查询两个表共有的数据,和右表表所有的数据,右表有左表没有的部分用null代替

    SELECT * FROM tb1 RIGHT JOIN tb2 ON 条件

    所有宿舍的学员情况

    没有学员的宿舍

    没有宿舍的学员

    (一)授权

  • 相关阅读:
    qiankun 报错:Target container with #container not existed while xxx mounting!
    promise加载队列实现
    promise 封装定时器
    关于promise
    节流防抖
    箭头函数特点
    this
    手写apply
    手写call
    手写bind函数
  • 原文地址:https://www.cnblogs.com/wutanghua/p/11008076.html
Copyright © 2011-2022 走看看