数据库

一、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 条件

 

所有宿舍的学员情况

 

没有学员的宿舍

 

 

 

没有宿舍的学员

 

 

 

(一)授权

 

posted @ 2019-06-12 10:28  爱学习的小猫咪  阅读(406)  评论(0编辑  收藏  举报