MySQL-7.5.31安装流程(Win64)及使用入门
- 一. 安装
- 二. 设置
- 三. 使用
- 四. Python-pymysql
一. 安装
1.下载地址:https://downloads.mysql.com/archives/community/
可把下载链接复制到迅雷下载 会更快
-
下载后解压缩至安装目录(目录不要有中文)
-
安装补丁
可能会需要两个补丁: VC++2013和DirectX 有报错安装即可 -
在软件目录中创建配置文件 my.ini 内容如下
-
初始化
注意:mysqld.exe是MySQL服务的执行文件 mysql.exe是mysql自带命令行工具的执行文件.
以管理员权限打开命令行(CMD)
运行初始化命令"D:\Program Files\mysql-5.7.31-winx64\bin\mysqld.exe" --initialize-insecure替换自己安装目录即可,在命令行中如文件夹有空格需要用引号""引起来.
如无错误提示且安装目录data文件已经创建则初始化正确
如出现错误则需要查找问题,删除data文件夹重新初始化 -
启动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 mysql57和net stop mysql57
二. 设置
-
添加环境变量并使用mysql自带命令行工具.
环境变量-->Path-->新建-->安装目录下的bin文件夹
添加成功后打开命令行mysql -u root直接敲回车即可进入.
完整的命令可以为:mysql -h 127.0.0.1 -P 3306 -u root -p-h 连接地址 -P 端口 -u 用户 -p 密码, 效果一样,因为还没有设置密码直接回车即可进入.效果如下:
-
给root 用户设置密码
在已经用root无密码登录的情况下 用set password = password('yourpassword');引号内为要设置的密码,记得要用;号结尾代表命令结束.
出现Query OK代表执行成功
在下次登录时就需要 带 -p 参数并输入密码才能登录
-
忘记密码怎么办?
- 关闭服务
net stop mysql57 - 修改配置文件
my.ini进入无账号模式,在最下面 加一行skip-grant-tables=1
- 启动服务
net start mysql57 - 重新登录并修改密码,此时再登录不需要密码.
use mysql;update user set authentication string = password('新密码'),password_last_changed=now() where user='root';
- 关闭服务-修改回配置文件-启动服务-用新密码重新登录
- 关闭服务
三. 使用
- 常用指令及简单入门
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(224-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;
其他类型还有很多 暂略.
- 对于表内数据的增删改查
insert into 表名(列名,列名) values(值,值);添加一条数据insert into 表名(列名,列名) values(值,值),(值,值),(值,值);添加多条数据.delete from 表名;删除整张表delete from 表名 where 条件;按条件删除 例id = 1,id > 2,id in(1,5)删掉1和5,name = "xx",也可以用and,or等update 表名 set 列=值;改一列的所有值,date 表名 set 列=值,列=值;改多列的所有值,update 表名 set 列=值 where 条件;按照条件改值,update tb7 set age=age+10 where id>5;也可以运算select * from 表名称;查询表中所有数据,select 列名称,列名称 from 表名称;查询某些列的数据.也可以用where追加条件.
四. Python-pymysql
- 安装pymsql
pip install pymysql - 连接MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='密码', charset='utf8', db='数据库名')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) - 发送指令
cursor.execute("insert into admin(user,password,mobile) values('1','2','3')")
conn.commit()提交命令 否则不生效 - 关闭连接
cursor.close()
conn.close() - 注意!注意事项!
不要用格式化字符串的方式去让程序发送指令,会有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']因为有了名字所以我们传字典 - 查询数据, 同样可以用占位符拼接.
连接和关闭一样,这里只写查询指令
sql = "select * from tb1"sql语句
cursor.execute(sql)执行语句
data_list = cursor.fetchall()获取查询到的所有数据并赋值给data_list,返回的值是列表套字典.如果没有数据返回空列表[]
data_list = cursor.fetchone()获取查询到的第一条数据.返回的是一个字典.如果没有数据返回None - 删除和修改都一样,略
- 注意 增删改的时候一定要
conn.commit(),查询时要记得fetchall()/fetchone()