Python学习日记(三十三) Mysql数据库篇 一

背景

Mysql是一个关系型数据库,由瑞典Mysql AB开发,目前属于Oracle旗下的产品。Mysql是目前最流行的关系型数据库管理系统之一,在WEB方面,Mysql是最好的RDBMS(Relational Database Management System)。Mysql是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

其他类似软件:

关系型数据库:sqllite、db2、Oracle、access、sql sever、Mysql

非关系型数据库:MongoDB、redis

安装

在Windows系统上,我们下载完Mysql后安装到任意目录下,可以看到里面有一个bin文件,打开

Python学习日记(三十三) Mysql数据库篇 一

里面有mysql.exe和mysqld.exe两个执行档,它们分别是客户端和服务端

Python学习日记(三十三) Mysql数据库篇 一

启用

在取得bin目录路径后,初始化服务端

Python学习日记(三十三) Mysql数据库篇 一

输入上面语句后我们会发现原目录下会多出一个data的文件夹

Python学习日记(三十三) Mysql数据库篇 一

然后再启动服务端

Python学习日记(三十三) Mysql数据库篇 一

之后我们再打开一个新的command,实现客户端连接到服务端

这里默认的用户名是root密码为空,执行时按回车跳过就好

Python学习日记(三十三) Mysql数据库篇 一

使用show databases;去看data文件下的文件:

Python学习日记(三十三) Mysql数据库篇 一

也可以创建一个新的db文件:

Python学习日记(三十三) Mysql数据库篇 一

添加环境变量

如果觉得每次执行时都要加上一长串的路径很麻烦我们可以直接在系统上添加环境变量

获取bin的路径:F:mysql-8.0.11-winx64mysql-8.0.11-winx64in

然后右键计算机->高级系统设置->高级->环境变量->找到系统变量的Path在后面加上;路径

Python学习日记(三十三) Mysql数据库篇 一

这样我们在执行服务端和客户端就不用再加上路径了

服务端:

Python学习日记(三十三) Mysql数据库篇 一

客户端:

Python学习日记(三十三) Mysql数据库篇 一

制作Windows上的Mysql服务

Python学习日记(三十三) Mysql数据库篇 一

这样我们就可以在服务的进程上看到了Mysql服务,我们就可以点击左上的启动此服务

Python学习日记(三十三) Mysql数据库篇 一

或者我们输入下面语句也可以启动服务

Python学习日记(三十三) Mysql数据库篇 一

如果要停止Mysql服务

Python学习日记(三十三) Mysql数据库篇 一

移除Mysql服务

 Python学习日记(三十三) Mysql数据库篇 一

创建用户及授权

首先在data文件夹下的文件夹(比如db1)我们可以称为数据库,而db1文件夹下的文件(Excel文件),我们称为表,在这个表中的一行行排列的就是数据行

默认的用户是root,那么这个root被放在哪里呢?

Python学习日记(三十三) Mysql数据库篇 一

 Python学习日记(三十三) Mysql数据库篇 一

Mysql在一个用户登录的时候会在user中查看里面是否有这个用户的信息

那如何创建新的用户?

语法:

create user 'username'@'IP addres' identified by 'password';             #限制只能在这台机器上登录
create user 'username'@'192.168.43.%' identified by 'password';             #%表示在最后一位数没有要求,只需要考虑前三尾数相同即可
create user 'username'@'%' identified by 'password';                   #表示所有机器都可以登入

授权用户

grant 权限名 on db1.t1 to 'username'@'%';     #只能让该用户访问db1文件夹下的表t1
grant 权限名 on db1.* to 'username'@'%';      #能让该用户访问db1文件夹下的所有表
grant 权限名 on *.* to 'username'@'%';        #表示可以让该用户访问所有数据库的内容

权限名称:

all privileges  除grant外的所有权限
select          仅查权限
select,insert   查和插入权限
usage                   无访问权限
alter                   使用alter table
alter routine           使用alter procedure和drop procedure
create                  使用create table
create routine          使用create procedure
create temporary tables 使用create temporary tables
create user             使用create user、drop user、rename user和revoke  all privileges
create view             使用create view
delete                  使用delete
drop                    使用drop table
execute                 使用call和存储过程
file                    使用select into outfile 和 load data infile
grant option            使用grant 和 revoke
index                   使用index
insert                  使用insert
lock tables             使用lock table
process                 使用show full processlist
select                  使用select
show databases          使用show databases
show view               使用show view
update                  使用update
reload                  使用flush
shutdown                使用mysqladmin shutdown(关闭MySQL)
super                   使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆
replication client      服务器位置的访问
replication slave       由复制从属使用

使用

创建一个新用户并给他授权

Python学习日记(三十三) Mysql数据库篇 一

然后我们重新开启一个客户端并登入新用户资料查看他能够看到的数据

Python学习日记(三十三) Mysql数据库篇 一

其他用户管理语法:

删除用户:drop user 'username'@'IP address';
修改用户:rename user 'username'@'IP address';
修改密码:set password for 'username'@'IP address' = Password('new password')

其他授权语法:

查看权限:show grants for 'username'@'IP address';
取消授权:revoke 权限名 on 'Database'.'Table' from 'username'@'IP address';

查看用户登录资料

Python学习日记(三十三) Mysql数据库篇 一

操作数据库及数据表

1.操作文件夹

<1>create database 新的数据库名; 创建一个新的数据库

Python学习日记(三十三) Mysql数据库篇 一

增加编码的要求:create database 新的数据库名 charset utf8; 这样写这个数据库的默认编码是以utf-8

<2>show databases; 显示所有数据库

<3>drop database 数据库名; 删除现有数据库

Python学习日记(三十三) Mysql数据库篇 一

2.操作文件

<1>show tables; 显示出所有表格

<2>create table 表名(第一列数据名 数据类型,第二列数据名 数据类型...); 创建一个新的表名

Python学习日记(三十三) Mysql数据库篇 一

①增加编码要求:create table 表名(第一列数据名 数据类型,第二列数据名 数据类型...) default charset=utf8; 

②增加引擎要求:create table 表名(第一列数据名 数据类型,第二列数据名 数据类型...) engine= innodb default charset=utf8;

innodb:支持事务,能恢复到之前的状态,原子性操作

myisum

③null、not null、default、auto_increment:

null->就是我的数据可以为空

not null->就是我的数据不可以为空

default->可以为我的数据设置一个默认值

auto_increment->用于自增,一般来说要搭配primary key使用;primary key的作用为约束(不能重复也不能为空)、加速查找,一个表里面只能有一个自增列,并且要有一个主键

Python学习日记(三十三) Mysql数据库篇 一

3.操作文件中的内容  

<1>insert into 表名(第一列数据名,第二列数据名...) values(值1,值2...); 往表内插入数据

Python学习日记(三十三) Mysql数据库篇 一

<2>selcet * from 表名; 查看表内所有信息

接上1的步骤结果

Python学习日记(三十三) Mysql数据库篇 一

再添加一条信息

Python学习日记(三十三) Mysql数据库篇 一

<3>解决中文数据问题

 Python学习日记(三十三) Mysql数据库篇 一

<4>delete from 表名; 清空这个表的数据

若一个表只有一个自增数,它的id已经增加到3,若使用delete from 去清空这个表,再之后又新增了一笔资料后,它的自增值不重新开始

Python学习日记(三十三) Mysql数据库篇 一

<5>truncate table 表名; 清空这个表的数据,执行速度快

使用trucate table就不会出现自增值不会不重新计算的情况

Python学习日记(三十三) Mysql数据库篇 一

<6>drop table 表名; 删除这个表

 Python学习日记(三十三) Mysql数据库篇 一

数据表基本数据类型

按整数去分:

1.int  

int unsighed:无符号整数 范围:0 ~ 4294967295

int sighed:有符号整数 范围:-2147483648 ~ 2147483647

2.tinyint

tinyint unsighed:无符号小整数 范围:0 ~ 255

tinyint sighed:有符号小整数 范围:-128 ~ 127

3.bigint

bigint unsighed:无符号大整数 范围:0 ~ 18446744073709551615

bigint sighed:有符号大整数 范围:-9223372036854775808 ~ 9223372036854775807

按小数去分:

1.FLOAT[(m,d)] 

并不准确的小数 数值越大越不准确,m是数字总个数,d是小数点后个数

 FLOAT unsighed:无符号单精度浮点数 范围:

-1.7976931348623157E+308 ~ -2.2250738585072014E-308
0
2.2250738585072014E-308 ~ 1.7976931348623157E+308

FLOAT sighed:有符号单精度浮点数 范围:
0
1.175494351E-38 to 3.402823466E+38

2.DOUBLE[(m,d)]

并不准确的小数 数值越大越不准确,m是数字总个数,d是小数点后个数

DOUBLE unsighed:无符号双精度浮点数 范围:

-1.7976931348623157E+308 to -2.2250738585072014E-308
0
2.2250738585072014E-308 to 1.7976931348623157E+308

DOUBLE sighed:有符号双精度浮点数 范围: 

 0
 2.2250738585072014E-308 to 1.7976931348623157E+308

3.decimal[(m[,d])]

精准的小数值,m是数字总个数(负号不算),d是小数点后个数,m最大值为65,d最大值为30

按字符串去分:

1.char(m)

char数据类型用于表示固定长度的字符串,可以包含最多达255个字符.其中m代表字符串的长度。即使数据小于m长度,也会占用长度。

2.varchar(m)

varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。

虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡

创建数据表时把定长的数据往前放置,把不固定长度的数据往后放

3.text

text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符 

4.mediumtext

范围:16,777,215 (2**24 − 1)个字符

5.longtext

范围:4,294,967,295 or 4GB (2**32 − 1)个字符

将上传文件存硬盘,DB存路径

按时间类型分:

1.DATE

YYYY-MM-DD(1000-01-01/9999-12-31)

2.TIME

HH:MM:SS('-838:59:59'/'838:59:59')

3.YEAR

YYYY(1901/2155)

4.DATETIME

YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)

5.TIMESTAMP

YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

按二进制数据分:

1.TinyBlob

2.Blob

3.MediumBlob

4.LongBlob

其他:

1.bit[(m)]

二进制位(101001),m表示二进制位的长度(1-64),默认m=1

2.enum

枚举类型An ENUM column can have a maximum of 65,535 distinct elements.(The practical limit is less than 3000.)
示例:
CREATE TABLE shirts (
      name VARCHAR(40),
      size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
                    );
INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');

3.set

集合类型A SET column can have a maximum of 64 distinct members.
示例:
CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

基本的增删改查

1.插入

insert into 表名(第一列数据名,第二列数据名...) values(值1,值2...);

2.删除

delete from 表名 where id<6; 只删除id小于6的数据

3.修改

①让表中所有的这个列下的值都改成一个固定数据:update 表名 set 列名=修改的固定值;

②基于①但有条件得去修改update 表名 set 列名=修改的固定值 where 列名=值;

4.查看

select * from 表名;