zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    SpringCloud整合过程中jar依赖踩坑经验
    spring-boot-starter-parent的主要作用
    配置Setting.xml文件提高maven更新下载jar包速度
    剑指Offer-编程详解-二维数组中的查找
    Git 拉取Gitee仓库报错:“fatal: unable to access ''": Failed to connect to 127.0.0.1 port 1080: Connection refused”
    SpringBoot整合mybatis——配置mybatis驼峰命名规则自动转换
    SpringBoot 整合 Mybatis + Mysql——XML配置方式
    ES+open-falcon之nginx状态码监控报警自动化
    zabbix告警邮件美化
    基于Jenkins+Gitlab的自动化部署实战
  • 原文地址:https://www.cnblogs.com/jokerbj/p/7497135.html
Copyright © 2011-2022 走看看