python开发mysql:mysql安装(windows)&密码找回&存储引擎简介&库表的增删改查

一,mysql安装

 1 下载地址 https://dev.mysql.com/downloads/file/?id=471342
 2 解压后,将目录C:mysql-5.7.19-winx64in添加到计算机环境变量中
 3 
 4 用CMD命令行执行,mysqld --initialize-insecure 初始化数据库,这样C:mysql-5.7.19-winx64
 5 这个目录下就会产生data的目录,里面包含的就是初始化的东西,配置文件,用户密码信息
 6 -insecure 这个参数就是告诉数据库登陆的时候以本地管理员的身份登陆,不需要密码
 7 
 8 用CMD命令行执行,mysqld,启动mysql,然后通过mysql -uroot -p 登陆到数据库里,退出是quit
 9 用CMD命令行执行,tasklist |findstr mysql  查看mysql运行状态,PID
10                  taskkill /PID 16504 /F    终止msyql运行
11 在计算机搜索栏,services.msc打开系统服务,查看有没有mysql这个服务,可以通过服务来控制开启和关闭
12 注意,这里需要用管理员身份来运行这个CMD
13 用CMD命令行执行,mysqld --install 来添加这个服务,之后你就可以通过系统服务来控制启动,关闭
14 用CMD命令行执行,mysqld --remove  移除这个服务
15 用什么方式启动,就用什么方式停止
16 
17 因为现在没有密码,咱们设置个密码
18 mysqladmin -uroot passwor 123  密码是123

二,密码找回

 1 mysqld --skip-grant-tables  跳过授权表启动mysql,可以通过空密码登陆
 2 在数据库里面更改密码
 3 update mysql.user set authentication_string=password('456') where user='root' and host='localhost';
 4 flush privileges;
 5 解释:
 6 password 这个是将你的密码存储的时候存储的不是明文,在5.6之前,密码叫做password,5.7叫做authentication_string
 7 where后面接条件,user是用户,host是哪台机器
 8 
 9 第二种方式,先停止mysql,跳过配置文件跳过授权表
10 在C:mysql-5.7.19-winx64目录下创建一个,my.ini文件,里面写
11 [mysqld]
12 skip-grant-tables
13 然后起mysql,会加载这个配置文件
14 用CMD命令行执行mysql,就可以空进去

三,配置文件

 1 [mysqld]
 2 default-storage-engine=INNODB  默认的存储引擎,默认就是
 3 innodb_file_per_table=1  每一个表都有一个自己的数据文件,很早以前只有一个表结构,数据都放在一起,不安全
 4 ;skip-grant-tables  跳过授权表
 5 port=3306 默认端口
 6 character_set_server=utf8  设置默认字符编码,创建数据库的时候都是这个编码了
 7 #mysql的安装目录
 8 basedir=C:mysql-5.7.19-winx64
 9 #data数据目录
10 datadir=C:mysql-5.7.19-winx64,默认是安装的目录,也可以自己指定
11 在ini文件里面,# ;都是注释的意思
12 如果改变数据目录,一定要重新初始化,那么之前的密码配置都会变成默认
13 注意,上面的操作一定是新安装的时候才可以,如果有数据了,这样做你的数据也没了
14 
15 注意,配置文件my.ini需要用pycharm写,用windows写有问题
16 配置文件
17 [mysqld]    #针对mysqld这个命令
18 pass
19 
20 [client]    全局客户端
21 user=root
22 password='' 密码,有的话就写,没有话就是空,在登陆的时候,可以直接mysql就可以了
23 
24 [mysql]        局部客户端,针对mysql客户端,这个命令
25 user=root
26 password=''
27 配置文件做如上更改的话,用mysql就可以直接登录
28 如果有mysql,就会用mysql里面账号登录,没有的话用client
29 这个配置不需要重启,只是针对命令,但是如果是mysqld有变动,就需要重启了

四,存储

1 innodb引擎支持事务回滚,存储数据更安全,库下面存放表结构,数据
2 myisam引擎速度快,不支持失误回滚,不安全,库下面存放表结构,数据,索引   **用这个引擎的表,插入数据跟innodb一样,性能上有差异
3 memory引擎速度快,数据存储在内存,库下面只有表结构              **用这个引擎的表,插入数据跟innodb一样,重启mysql之后就没了
4 blackhole引擎,黑洞,垃圾数据可以往里面加,库下面只有表结构     **用这个引擎的表,插入数据就会没有,被当垃圾回收

五,创建账号

 1 select user(); 查看当前用户在哪里登录
 2 help create;查询帮助 help create user;查看创建用户的帮助
 3 
 4 服务端创建账号
 5 创建本地账号
 6 cteate user 'egon'@'localhost' identified by '123';
 7 创建远程账号
 8 cteate user 'egon'@'%' identified by '123';
 9 创建网段账号
10 cteate user 'egon'@'192.168.20.' identified by '123';
11 
12 
13 客户端登录账号
14 mysql -uegon -p123
15 mysql -h192.168.20.97 -uegon -p123  -h服务端地址
16 
17 如果输入错误在最后面加入 c就是取消了,不需要加;
18 create databse 'db;
19 这样的输入错误,c是结束不了,需要先'c这样,因为引号是成对

六,简单增删改查

 1 数据库操作,都是在mysql里面操作
 2 create database db1; 创建数据库,这样data目录下就会有个db1的目录
 3 create database db1 charset utf8; 在创建数据库的时候指定字符编码
 4 show  create database db1; 查看单个数据库信息
 5 show  databases; 查看所有数据库
 6 drop database db1; 删除数据库
 7 alter database db1 charset utf8; 修改数据库字符编码
 8 user db2; 切换数据库
 9 select database(); 返回当前在哪个数据库下
10 
11 表操作,切换到数据库下
12 create table t1(id int,name char)engine=innodb;  创建表
13 t1是表名,括号里面是字段,int,整形 char,字符串,engine=innodb指定存储引擎,默认就是innodb,可不加
14 t1.frm 表结构,t1.ibd 数据  ib就是InnoDB引擎
15 show create table t1; 查看表
16 show tables; 查看当前数据库下的表
17 drop table t1; 删除表
18 
19 插入数据,如果表的字段有三个,那我插的时候也是三个,就是按位置传参数,少一个不行
20 insert into t1 values(1,'egon',18);
21 insert into t1(id) values(1,'egon');  这样报错,传入的参数多
22 insert into t1(id) values(1);  这样就是传一个,其他字段就是空
23 查表数据
24 select id,name,age from t1;  可以用*代表id,name,age就是所有

      详细的增删改查,对于表操作

 1 首先要创建表
 2 create table t1(id int,name char(10))engine=innodb default charset utf8;
 3 插入数据,可以多插入
 4 insert into db1.t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
 5 insert into db1.t1(name) values('egon1'),('egon2'),('egon3');这样的话,id就是空
 6 查看信息
 7 select * from db1.t1;
 8 select name,id from db1.t1;
 9 修改信息
10 update db1.t1 set name='sb' where id=4; 条件这块写name='egon3';
11 也可以,等号字符后面有空格可以忽视,前面的话就不成功
12 删除信息
13 delete from t1 where id=4; 删除id=4这行
14 delete from t1;  清空表
15 truncate t1;  清空表,大数据比上面快,delete删除会一条一条删除,要判断
16 
17 3.2 插入递增数据
18 create table t1(id int not null,name char(10));  id这块不能为空,如果在插入数据没有id的时候就会报错
19 create table t1(id int primary key auto_increment,name char(10));
20 create table t1(id int not null unique auto_increment,name char(10));
21 primary key  主键,不为空,而且是唯一的
22 not null unique  主键,不为空,而且是唯一的
23 auto_increment  递增
24 insert into t1(name) values('egon1'),('egon2'),('egon3'); 插入数据,id递增
25 select * from t1 where id>2; 利用主键查询速度快
26 如果用delete from t1; 清除表,id还是递增的,用truncate t1; 清空表,就是从1开始
27 
28 约束可通过desc t1查看 pri就是主键
29 
30 3.3 拷贝表
31 create table t2 select * from t1;  拷贝出来的是表结构和数据,但是主键,约束没有拷贝过来
32 create table t2 select * from t2 where 1=2;  拷贝表结构,因为后面条件不成立
33 
34 3.4 修改主键
35 desc t2,没有主键,我们创建这个主键,其实是修改
36 alter table t2 modify id int primary key auto_increment;  修改字段增加主键
37 
38 3.5 删除记录
39 delete 删除的是一条记录
40 delete from t1 where id=1;  删除一条记录
41 update t1 set name='' where id=1; 
42 如果删除字段值,其实就是修改,不加where 就是修改这个表所有的该段记录

七 授权权限,insert,delete,update,select

 1 先创建账号
 2 create user 'lin'@'localhost' identified by '123';
 3 级别1,对所有库下所有表下的所有字段
 4 grant select on *(所有库).*(所有表) to 'lin'@'localhost';
 5 可以合并授权加创建账号
 6 grant select on *(所有库).*(所有表) to 'lin'@'localhost' identified by '123';
 7 
 8 级别2,对db1下所有表的所有字段
 9 grant select on db1.*(所有表) to 'lin'@'localhost' identified by '123';
10 
11 级别3,对db1.t1表下的所有字段
12 grant select on db1.t1 to 'lin'@'localhost' identified by '123';
13 
14 级别四,对db1.t1表下的id,name字段
15 grant select (id,name) on db1.t1 to 'lin'@'localhost' identified by '123';
16 select id,name from t1; 
17 grant select (id,name),update(name) on db1.t1 to 'lin'@'localhost' identified by '123';
18 可以修改这个name这个字段
19 update t1 set name='Egon' where id=1;
20 
21 flush privileges; 授权完需要刷新这个权限
22 
23 移除权限
24 revoke select on db1.* from 'egon'@'localhost';  移除权限
25 help revoke
26 
27 msyql库下,这些表掌控的就是权限表
28 user 所有库级别权限就是root权限
29 db     单个库权限
30 tables_priv  单个表权限
31 columns_priv  字段权限

八 字符编码

 1 默认是latin文,是没有办法插入中文,你就需要更改这个表的字符集
 2 show create table t1;
 3 alter table t1 charset utf8;
 4 但是还是插入不进去,因为有些字段可能还是latin文,所以要针对这个字段做些更改
 5 alter table t1 modify name char(10);  我这里重新定义一下这个字段,那么他就会按照表的字符编码设置了
 6 配置文件这块修改默认字符集,需要用Pycharm修改,本地修改不生效
 7 [client]
 8 default-character-set=utf8
 9 [mysql]
10 default-character-set=utf8
11 [mysqld]
12 character_set_server=utf8   5.7版本修改参数
13 ;default-character-set=utf8  老版本
14 重启生效
15 
16 s 查看数据库一些配置信息,能看到服务端,数据库,客户端,客户端连接所有字符编码是不是utf8
原文地址:https://www.cnblogs.com/jokerbj/p/7497135.html