3.mysql数据库
3.1 数据库介绍
3.1.1. 为什要用数据库
1)将文件写在一台机器的缺点:
(1)将文件和程序存在一台机器上是很不合理的。
(2)操作文件是一件很麻烦的事
2)数据库的优势:
(1)程序稳定性 :这样任意一台服务所在的机器崩溃了都不会影响数据和另外的服务。
(2)数据一致性 :所有的数据都存储在一起,所有的程序操作的数据都是统一的,就不会出现数据不一致的现象
(3)并发 :数据库可以良好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发的网络操作,不需要我们自己写socket
(4)效率 :使用数据库对数据进行增删改查的效率要高出我们自己处理文件很多
3.1.2. 认识数据库
1)数据(Data)
2)数据库DB(DataBase):存放数据的仓库
3)数据库管理系统DBMS(DataBase Management System)
如MySQL、Oracle、SQLite、Access、MS SQL Server
mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。
oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。
数据库管理员 DBA(Database Administrator)
4)数据库服务器、数据管理系统、数据库、表、记录的关系(重点)
数据库服务器-:运行数据库管理软件
数据库管理软件:管理-数据库
数据库:即文件夹,用来组织文件/表
表:即文件,用来存放多行内容/多条记录
记录:多个字段的信息组成一条记录,即文件中的一行内容
5)数据库管理软件分类
根据数据库存取数据的特点来分类,主要分为关系型和非关系型。
关系型数据库需要有表结构,如sqllite,db2,oracle,access,sql server,MySQL,注意:sql语句通用。关系型数据库使用方便,但速度稍慢
非关系型数据库是key-value存储的,没有表结构。如ongodb,redis,memcach。非关系型数据库处理速度快。应用通过快递单号查快递,通过电影名字查电影信息。
3.2 初识mysql
3.2.1. mysql介绍
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(Relational Database Management System,关系数据库管理系统)应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。
MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
3.2.2. mysql下载和安装(MySQL Community Server社区版)
MySQL官网:https://www.mysql.com/
MySQL下载地址:https://www.mysql.com/downloads/
1)下载
进入下载页面就可以下载最新版本。如果需要下载历史版本,点击Archives
点击上图的Archives按钮,下载历史版本
2)安装
(1)解压
下载的zip文件解压,将解压之后的文件夹放到任意目录下,这个目录就是mysql的安装目录。
(2)配置
a)禁止打开安装目录下的“my-default.ini”,该文件是“utf-8”编码的,双击打开可能会将编码格式改为windows默认的“gbk”编码。如果好奇可以使用nodepad++查看。
b)将“my-default.ini”复制到pycharm中,并将该文件重命名为“my.ini”。
c) pycharm中在打开“my.ini”,清空文件中的内容,并将以下信息复制到文件中:
d)注意:
检查每行的开头和结尾不能有空格
basedir和datadir 两个目录根据实际的安装目录进行修改,目录内容不能有转义、不能有中文、不能有空格
f)保存。并将“my.ini”文件复制到安装目录
(3)添加环境变量
将安装目录的bin(C:mysqlmysql-5.6.44-winx64in)文件夹添加到环境变量(环境变量->系统变量->Path->新建)。
(4)安装MySQL服务
以管理员身份打开cmd窗口后,将目录切换到你解压文件的bin目录,输入mysqld install回车运行
(5)启动mysql服务
以管理员身份在cmd中输入:net start mysql
服务启动成功之后,就可以登录了,输入mysql -u root -p(第一次登录没有密码,直接按回车过)
(6)启动客户端登录mysql
cmd中输入mysql -uroot -p(mysql5.6默认没有密码,直接按回车过)
(7)停止mysql服务
以管理员身份在cmd中输入: net stop mysql
3.2.3. SQL语言
SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
1)DDL(DataBase Define Language)语句——数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2)DML(DataBase Manage Language)语句——数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
3)DCL(DataBase Control Language)语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
3.2.4. mysql的账号操作
1)登录mysql客户端
cmd中输入:mysql -uroot -p(mysql5.6默认没有密码,直接按回车过)
mysql> select user(); # 查看当前用户
mysql> exit # 也可以用q quit退出
2)给当前用户设置密码
mysql> set password = password('密码');
3)创建账号
mysql> create user '用户名'@'客户端IP网段或域名' identified by '密码';
mysql> create user 'guest'@'192.168.10.%' identified by '123456';
创建guest用户,可以使用网段'192.168.10.'登录数据库,登录密码123456
mysql> create user 'eva'@'192.168.10.5' # 指示某机器可以连接
mysql> create user 'eva'@'%' #指示所有机器都可以连接
mysql> show grants for 'eva'@'192.168.10.5'; #查看某个用户的权限
4)远程登录
mysql -uguest -p -h192.168.0.146(远程登录)
用户名:guest
mysql服务器地址:192.168.0.146
5)给账号授权
grant 权限 on 数据库名.表名 to 用户@网段
权限:select(查询)、insert(插入)、update(更新)、delete(删除)、all(所有权限)
数据库名和表名可以使用通配符“”
mysql> grant all on . to 'eva'@'%';
mysql> grant select on . to 'eva'@'%';
mysql> grant select,insert on . to 'eva'@'%';
授权"guest"@"192.168.1.%"用户,对数据库test123的所有表单拥有所有权限:
创建用户的同时,赋予数据库操作权限:
6)刷新使修改立即生效
mysql> flush privileges;
3.2.5. mysql的数据库操作(重点)
1)查看数据库
mysql> show databases
2)创建数据库
mysql> create database 数据库名
3)切换到数据库下
mysql> use 数据库名
4)查看当前数据库
mysql> select database();
5)查看数据库中所有表
mysql> show tables;
6)删除数据库(慎用)
mysql> drop database 数据库名
3.2.6. mysql的表操作(重点)
1)先切换到数据库下:
mysql> use 数据库名
2)新增表单:
mysql> create table 表名(字段名1 数据类型(长度), 字段名2 数据类型(长度));
新增多条数据
3)查看表结构
mysql> desc 表名; # describe的缩写:描述
4)查询创建表的详细信息
mysql> show create table 表名;
5)删除表
mysql> drop table 表名;
3.2.7. mysql的数据操作(重点)
1)插入数据
mysql> insert into 表名 values(数据1,数据2);
2)查询数据
mysql> select 字段 from 表名 where 判断条件;
按条件查询:
3)修改数据
mysql> update 表名 set 字段名1=值1, 字段名2=值2 where判断条件;
修改一条数据中的多个值:
没有条件判断,会修改表中所有数据的该字段(慎用)
4)删除数据
mysql> delete from 表名 where 判断条件;
没有条件判断,会删除表中所有数据(慎用)
5)使用“c”,离开命令行
命令输入错了(单行或多行都行),在命令结尾输入“c”,可以清除已输入的命令,回到“mysql>”提示符。
6)补齐符号后,使用“c”,离开命令行
3.3 存储引擎
3.3.1. 概念
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。
MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。
只有mysql支持多种存储引擎,其它数据库只支持一种存储方式。
3.3.2. mysql支持的搜索引擎
mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。
1)InnoDB存储引擎(mysql5.6及之后版本的默认存储引擎)
数据和索引存储在一起——需要2个文件:数据索引文件、表结构文件
(1)数据存储在硬盘,数据持久化
(2)支持事物:为了保证数据的完整性,将多个操作变成原子性操作。在多行操作前开启事务,在多行操作后提交事务。多行数据执行到一半,突然断电或断网,前面执行的语句会回滚,回到执行前的状态。将多行代码变成不可拆分的原子性操作。
(3)支持行级锁:可以给单行数据加锁,修改少数行数据时使用。锁:修改数据时对数据加锁,防止同时修改。
(4)支持表级锁:可以给表加锁,批量修改多行数据时使用。
(5)支持外键:约束两张表中的关联字段不能随意添加或删除
2)Myisam存储引擎(mysql5.6之前版本的默认存储引擎)
(1)数据和索引不存储在一起——需要3个文件:数据文件、索引文件、表结构文件
(2)数据存储在硬盘,数据持久化
(3)支持表级锁
3)Memory存储引擎
(1)只需要一个文件存储表结构
(2)数据存储在内存,数据断电消失
3.3.3. 存储引擎相关sql语句
1)查询mysql支持的搜索引擎:
mysql> show engines;
2)查看当前的默认存储引擎:
mysql> show variables like "default_storage_engine";
查看存储引擎相关内容,使用“%”
mysql> show variables like "%engine%";
3)指定存储引擎建表
mysql> create table 表名(字段1 类型,字段1 类型) ENGINE=存储引擎;
(1)使用默认存储引擎建表:
资源管理器中会发现创建了2个文件:
(2)使用MyISAM存储引擎建表
资源管理器中会发现创建了3个文件:
(3)使用Memory存储引擎建表
资源管理器中会发现创建了1个文件:
注意:使用Memory存储引擎建表时,mysql重启或断电后,表中存储的数据会丢失。