数据库
一、mysql安装与介绍
(一)概念介绍
数据库:存储数据的仓库。对数据进行存储,并且提供增、删、改、查的数据操作。
数据库建模:使用数据库来表达业务和业务的关系,数据建模成功与否决定了项目 的成败。
业务逻辑:实体业务之间的关系,比如:养殖场,猪和饲养员的关系。
事务:
事务:是作为一个单元的一组有序的数据库操作,如果组当中所有操作都成功,则事务执行成功,如果有一个操作执行失败,则事务执行失败,回滚操作。
事务的特性:
原子性:事务包含的所有操作全部成功,要么全部失败回滚;成功必须完全应 用到数据库,失败则不能不能对数据库产生影响。
一致性:事务执行前和执行后必须处于一致状态。
隔离性:当多用户并发访问数据库时候,数据库为每一个用户开启一个事务, 这个事务不被其他事务操作干扰,多个并发事务直接互相隔离。
持久性:一旦事务被提交了,那么数据库当中的数据改变是永久性的,即便数 据库系统发生故障,也不会丢失事务操作。
事务的回滚:
事务是用户定义的一组数据库操作。这些操作要么全做,要么全不做,回滚会自动是将该事务完成的操作撤销。
数据库提供的四种隔离等级:
如果我们不考虑隔离性,会导致
脏读
在一个事务处理的过程当中读取另一个没有提交的事务当中的数据,然后使用了数据。
A向B转账100元,A通知B查看账户,B发现已经到账,转账操作过程当中,事务发生问题,进行回滚,B再查账发现没有成功。
不可重复读
在一个事务之内,多次读取一条数据,这个事务没有结束,另一个事务也访问这个数据,第二个事务访问数据要对数据进行修改,那么一个数据两次事务读到的结果肯能不一样。
幻读
有两个事务,第一个操作所有的数据,第二个操作一条数据,第二个事务没有提交,第一个事务查看到的数据是之前的。
以上的问题都处于数据库没有隔离性。
隔离性的四个等级
Read uncommited(读未提交),最低级别,任何情况都可以发生。
Read commited(读已提交),可以避免脏读
Repeatable read(可重复读),可以避免脏读,不可重复读的发生
Serializable(串行化),可以避免脏读,不可重复读,幻读的发生
数据库分类
关系型数据库:是建立在在关系模型的基础上的数据库,借助集合,代数等数学概念和方法来处理数据。
Oracle,db2,sqlserver,access,Mysql,sqlite
非关系型数据库(nosql not only sql):以key-value形式存储的文档数据库
Redis、mongodb
{“name”:”筑基丹”,”img”:[“1.jpg”,“1.jpg”,“1.jpg”]}
(二)MYSQL数据库安装
Mysql引擎
数据库的引擎是用于存储,处理和保护数据的核心服务。利用数据库引擎可以控制访问权限并且快速的处理事务,利用数据库引擎创建连接事务处理。
MySQL数据库引擎分类
(1)ISAM
ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。
(2)MYISAM
MYISAM是MYSQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的功能,MYISAM还使用一种表格锁定的机制,来优化多个并发的读写操作。其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MYISAM还有一些有用的扩展,例如用来修复数据库文件的MYISAMCHK工具和用来恢复浪费空间的MYISAMPACK工具。
MYISAM强调了快速读取操作,这可能就是为什么MYSQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。
(3)HEAP
HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。
(4)INNODB和BERKLEYDB
INNODB和BERKLEYDB(BDB)数据库引擎都是造就MYSQL灵活性的技术的直接产品,这项技术就是MYSQL++ API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MYISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAM和MYISAM引擎慢很多,但是INNODB和BDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者或者两者,那你就要被迫使用后两个引擎中的一个了。
数据库安装
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文件缺失,网上下载文件包:
将这个文件复制到
错误2:Mysql配置文件有问题
错误3驱动缺
解决方案,下载DirectX Repair
从新启动电脑。
错误3:Cmd不是管理员身份
错误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 表
Field(column) 字段
Value 值
对比office的Excel来看
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 字符
Char和varchar 都需要指定长度,如果字符的长度不够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
这两张表通过parent的id来关联
查询老张的所有儿子
查询李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 条件
所有宿舍的学员情况
没有学员的宿舍
没有宿舍的学员
(一)授权