MySQL-7.5.31安装流程(Win64)及使用入门


目录
  • 一. 安装
  • 二. 设置
  • 三. 使用
  • 四. Python-pymysql

一. 安装

1.下载地址:https://downloads.mysql.com/archives/community/

可把下载链接复制到迅雷下载 会更快

  1. 下载后解压缩至安装目录(目录不要有中文)

  2. 安装补丁
    可能会需要两个补丁: VC++2013和DirectX 有报错安装即可

  3. 在软件目录中创建配置文件 my.ini 内容如下

  4. 初始化 注意:mysqld.exe是MySQL服务的执行文件 mysql.exe是mysql自带命令行工具的执行文件.
    以管理员权限打开命令行(CMD)
    运行初始化命令"D:\Program Files\mysql-5.7.31-winx64\bin\mysqld.exe" --initialize-insecure 替换自己安装目录即可,在命令行中如文件夹有空格需要用引号""引起来.
    如无错误提示且安装目录data文件已经创建则初始化正确

    如出现错误则需要查找问题,删除data文件夹重新初始化

  5. 启动mysql服务(两种方法)
    第一种 在命令行中找到安装目录运行mysqld.exe 关闭命令行就关闭了 不建议使用
    第二种 将mysql注册成windows服务(推荐)
    1. "D:\Program Files\mysql-5.7.31-winx64\bin\mysqld.exe" --install mysql57 最后面的mysql57是服务的名字可以自己定义

    2. 在windows的服务中找到刚刚注册好的服务并启动

    3. 也可以用命令行启动或停止注册好的mysql服务net start mysql57net stop mysql57


二. 设置

  1. 添加环境变量并使用mysql自带命令行工具.
    环境变量-->Path-->新建-->安装目录下的bin文件夹

    添加成功后打开命令行 mysql -u root 直接敲回车即可进入.
    完整的命令可以为:mysql -h 127.0.0.1 -P 3306 -u root -p -h 连接地址 -P 端口 -u 用户 -p 密码, 效果一样,因为还没有设置密码直接回车即可进入.效果如下:

  2. 给root 用户设置密码
    在已经用root无密码登录的情况下 用 set password = password('yourpassword'); 引号内为要设置的密码,记得要用;号结尾代表命令结束.

    出现 Query OK 代表执行成功
    在下次登录时就需要 带 -p 参数并输入密码才能登录

  3. 忘记密码怎么办?

    1. 关闭服务 net stop mysql57
    2. 修改配置文件my.ini 进入无账号模式,在最下面 加一行 skip-grant-tables=1
    3. 启动服务 net start mysql57
    4. 重新登录并修改密码,此时再登录不需要密码.
      1. use mysql;
      2. update user set authentication string = password('新密码'),password_last_changed=now() where user='root';
    5. 关闭服务-修改回配置文件-启动服务-用新密码重新登录

三. 使用

  1. 常用指令及简单入门
    show databases; 查看存在的数据库
    exit; 退出
    use 数据库名字; 使用某个数据库
    show tables; 进入数据库后 查看数据库内有多少个表.
    create database 数据库名字 创建新的数据库
    create database 数据库名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 创建新的数据库 并以utf-8 方式编码,排序规则默认,python使用数据库一般用这个.
    drop database 数据库名字; 删除某个数据库
    创建表 命令格式,注意 最后一列 没有逗号
    create table 表名称(
    	列名称 类型,
    	列名称 类型,
    	列名称 类型
    )default charset=utf8;
    
    创建表 例子
    create table tb1(
    	id int auto_increment primary key,  -- primary key主键 不可重复 不允许为空 ,auto_increment 自增不用手动添加
    	name varchar(16) not null,  -- 不允许为空
    	age int default 3  -- 设置此列默认值
    )default charset=utf8;
    
    创建表 方便复制[标准]
    create table tb1(
    	id int not null auto_increment primary key,
    	name varchar(16) not null,
    	age int default 3
    )default charset=utf8;
    
    删除表 drop table 表名称;
    查看表结构 desc 表名称;
    mysql的数据类型:
    1. tinyint:有符号[默认] -128~127, 无符号 0~255 ,如果想无符号 类型写tinyint unsigned
    2. int 有符号 范围:-2147483648 ~ 2147483647 ,int unsigned 无符号 范围:0 ~ 4294967295
    3. bigint 有符号范围 -9223372036854775808 ~ 9223372036854775807 无符号范围: 0~18446744073709551615
    4. float 不常用
    5. double 不常用
    6. decimal 最常用 是准确的小数值,m是数字总个数(符号不算),d是小数点后个数,m最大为65,d最大为30
    create table L2( id int not null priamry key auto_increment, salary decimal(8,2) -- 8是m ,2是d,小数点前8位,小数点后2位.小数超过会四舍五入,整数超过会报错. )default charset=utf8;
    7. char(m) 定长字符,m的最大值是255,可以存储255个字符.存少的内容也会用固定长度存储 ,超出规定字符数会报错.优点是搜索速度快.可以用于 电话号,密码加密后的哈希也是定长.等场景
    8. varchar(m) 变长字符 与定长相反 节省存储空间,用于存储不确定多长的数据.m的最大值是65535,我们用utf8一个字符3字节,所以除3就是能存储多少个字符.
    9. text 保存变长的大自负床 可以最多到65535(216 -1)个字符 一般用于存文章新闻等等 用的时候text不用加(m)
    10. mediumtext 16777215(2
    24-1)个字符
    11. longtext 4294967295或者4GB (2**32-1)个字符.
    12. datetime 日期时间 YYYY-MM-DD HH:MM:SS
    13. date 日期 YYYY-MM-DD
    例子:
    create table tb2( id int not null auto_increment primary key, name varchar(64) not null, password char(64) not null, email varchar(64) not null, age tinyint, salary decimal(10,2), ctime datetime )default charset=utf8;
    其他类型还有很多 暂略.

  1. 对于表内数据的增删改查
    1. insert into 表名(列名,列名) values(值,值); 添加一条数据
    2. insert into 表名(列名,列名) values(值,值),(值,值),(值,值); 添加多条数据.
    3. delete from 表名; 删除整张表
    4. delete from 表名 where 条件; 按条件删除 例id = 1,id > 2,id in(1,5)删掉1和5,name = "xx",也可以用and,or
    5. update 表名 set 列=值;改一列的所有值,date 表名 set 列=值,列=值;改多列的所有值,update 表名 set 列=值 where 条件;按照条件改值,update tb7 set age=age+10 where id>5;也可以运算
    6. select * from 表名称;查询表中所有数据,select 列名称,列名称 from 表名称;查询某些列的数据.也可以用where追加条件.

四. Python-pymysql

  1. 安装pymsql pip install pymysql
  2. 连接MySQL
    conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='密码', charset='utf8', db='数据库名')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
  3. 发送指令
    cursor.execute("insert into admin(user,password,mobile) values('1','2','3')")
    conn.commit() 提交命令 否则不生效
  4. 关闭连接
    cursor.close()
    conn.close()
  5. 注意!注意事项!
    不要用格式化字符串的方式去让程序发送指令,会有sql注入的问题 有漏洞 正确方式如下:
    sql = cursor.execute("insert into admin(user,password,mobile) values('%s','%s','%s')") 这不是格式化 是pymysql内部的占位符
    cursor.execute(sql,['值1','值2','值3'] 第一个参数是sql语句,第二个参数是列表,元素是要传入的值,如果只有一个元素要加逗号, [3, ]
    也可以这样
    sql = cursor.execute("insert into admin(user,password,mobile) values('%(n1)s','%(n2),'%(n3)s')") 这里相当于给占位符起了名字
    cursor.execute(sql,['n1': '值1',['n2': '值2',['n3': '值3'] 因为有了名字所以我们传字典
  6. 查询数据, 同样可以用占位符拼接.
    连接和关闭一样,这里只写查询指令
    sql = "select * from tb1" sql语句
    cursor.execute(sql) 执行语句
    data_list = cursor.fetchall() 获取查询到的所有数据并赋值给data_list,返回的值是列表套字典.如果没有数据返回空列表[]
    data_list = cursor.fetchone() 获取查询到的第一条数据.返回的是一个字典.如果没有数据返回None
  7. 删除和修改都一样,略
  8. 注意 增删改的时候一定要conn.commit(),查询时要记得fetchall()/fetchone()