mysql免安装版配置

配置环境变量
将C:\mysql\mysql8.0.12\mysql-8.0.11-winx64\bin添加到环境变量中
注意是自己解压mysql文件的目录下的bin文件目录下
创建my.ini文件
在mysql目录下创建my.ini文件
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=C:\mysql\mysql8.0.12\mysql-8.0.11-winx64/bin
# 设置mysql数据库的数据的存放目录
datadir=C:\mysql\mysql8.0.12\mysql-8.0.11-winx64/bin\\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
#使用–skip-external-locking MySQL选项以避免外部锁定。该选项默认开启
external-locking = FALSE
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysqld_safe]
log-error=C:\mysql\mysql8.0.12\mysql-8.0.11-winx64/bin\\mysql_oldboy.err
pid-file=C:\mysql\mysql8.0.12\mysql-8.0.11-winx64/bin\\mysqld.pid
# 定义mysql应该支持的sql语法,数据校验
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
初始化数据库
管理员模式打开命令行窗口输入
cd C:\mysql\mysql8.0.12\mysql-8.0.11-winx64\bin
mysqld --initialize --user=mysql --console
注意此时会出现随机的初始密码,务必复制保存,后面要用
报缺少msvcp140.dll,下载VC++ 2015配置文件,安装解决
如果此处提示无法写入文件,可能是“\bin”的原因,改为“/bin”,“\b被当成转义字符”
提示成功后输入
mysqld --install
如果提示已安装先卸载再安装,否则后面易报错
mysqld --remove
mysqld --install
修改root账户初始密码
管理员方式运行cmd
net start mysql
启动后输入
mysql -u root -p
输入密码
粘贴之前保存的随机密码
修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
注意:newpassword为自己设的新密码,分号不能丢
提示成功后输入
FLUSH PRIVILEGES;
远程连接访问
允许他人访问本机
use mysql;
update user set host='host1' where user='root';
host1为允许访问的主机的IP地址,可以设为'%',允许任何人访问
访问他人主机
建立连接时将主机和密码设为目标主机的IP和数据库登录密码
使用
在bin目录下执行
net start mysql
mysql -uroot -ppassword
注意:-u后面为用户名,-p后面为密码
基本指令
创建数据库
create database student;
列出数据库
show databases;
使用数据库
use database_name;
删除数据库
drop database dbname;
创建表格
create table infor(
sno varchar(15) not null,
name varchar(20) not null,
sex varchar(10) not null,
age int,
major varchar(30) not null,
class varchar(30) not null,
primary key(sno)
)engine=InnoDB default charset=utf8;
列属性设置
1.列描述
comment: 表示描述,没有实际含义,是专门用来描述字段的
create table my_friend(
name varchar(20) not null comment '姓名',
age tinyint not null comment '年龄'
)charset utf8;
show create table my_friend;
2.默认值
default,某一数据会经常性出现某个具体的值
create table my_default(
name varchar(20) not null,
age int unsigned default 0,
sex default '男'
)charset utf8;
3.限制属性值的范围
create table my_default(
name varchar(20) not null,
age int unsigned default 0,
sex enum('男','女') default '男'
)charset utf8;
查看所有表格
当前数据库
show tables;
显示表格属性
显示当前数据库中的表格infor属性
desc infor;
插入数据
insert into infor(sno, name, sex, age, major, class)
values('01', 'xiaocaicai', 'male', 22, 'python', 'python01'),
('02', 'LEIZI', 'male', 18, 'java', 'java01'),
('03', '由美', 'fomale', 22, 'html', 'html01'),
('04', '丸子', 'fomale', 18, 'UI', 'UI01');
查询表格
1.查询所有
select * from infor;
2.查询sno,name
select sno, name from infor;
3.条件查询,年龄大于十八的
select * from infor where age >18;
4.年龄在(18,23]
select * from infor where age > 18 and age <=23;
5.where条件设置,只查询18和23,还有not in
select * from infor where age in (18,23);
6.排序(desc降序, asc升序)
select * from infor where age > 18 and age <=23 order by age desc;
7.限制查询条件,从下标0到下标1(不含下标2)
select * from infor where age > 18 and age <=23
order by age desc
limit 0,2;
8.模糊查找
匹配字段
结果
%E
以E结尾
E%
以E开头
%E%
含有E的任意字符
_E
E前有一个字符
E__
E后有两个字符
查找name以'L'开头的人员信息
select * from infor where name like 'L%';
9.联表查询
create table score(
sno varchar(15) not null,
math float,
english float,
Chinese float,
history float,
primary key(sno)
)engine=InnoDB default charset=utf8;
==>
insert into score(math, english, Chinese, history)
values('01', 87, 93, 78, 88),
('02', 76, 78, 80, 90);
添加外键
Alter table score add foreign key(sno) references infor(sno);
注意: 设置外键后数据的更新操作会受到关联表(主表)的限制, 
即需要先更新主表才能更新子表(设置外键的表),这样可以防止主副表数据不一致.
10.复合条件查询
子条件查询
select * from stu where sno in( select * from score where math >70 and math <80 );
查询两表按需取列
select stu.*,score.math,score.english from stu,score where stu.sno=score.sno;
自然合并去重
select * from stu natural join score where stu.sno=score.sno;
按组查询
1.使用group by,只返回组的第一行
select * from stu group by sex;
2.使用group_concat(),查看每个组的详细信息
select *,使用group_concat()
SELECT *,group_concat(sno, name) FROM stu GROUP BY class;
3.聚合函数
count(): 统计记录的数目 
count(*)以优化形式快速返回,count(columns)统计列中非空的数量
sum() : 求字段的和 
avg() : 求字段的平均值 
max() : 求字段的最大值 
min() : 求字段的最小值 
count(*):示例
select count(*) as '总人数' from stu;
select major as '专业',count(*) as "人数" from stu group by major;
avg(): 示例
select avg(age) as '平均年龄' from stu;
sum(): 示例
select sum(age) from stu;
max(): 示例
select max(age) from stu;
+综合示例
select major,count(*) as '总人数',sum(age) as '年龄和值',
max(age) as '最大年龄',min(age) as '最小年龄'
from stu group by major;
4.使用having 对分组结果进行二次筛选
select major,count(*) as '人数大于2的'
from stu group by major having count(*)=2;
删除信息
delete from infor where sno='001';
更新数据
update infor set age=23 where name='LZ';
删除表格
drop table student;
快速创建表格
1、复制表格
create table stu like infor;
2、复制指定列,可以添加限制条件
create table stu2 as select name,sno from infor where age >= 23;
增加一个列
Alter table stu2 add column age int;
添加主键
Alter table stu2 add primary key(sno);
添加外键
Alter table score add foreign key(sno) references infor(sno);
删除主键
Alter table stu2 drop primary key;
python连接操作mysql
连接数据库
import pymysql
cnx = pymysql.connect(user='root', password='lz3v',
host='127.0.0.1',
# 主机,127.0.0.1为本地主机
port=3306, # mysql数据库端口
database='student',
charset='utf8')
# 关闭连接
cnx.close()
创建新表
import pymysql
cnx = mysql.connector.connect(user='root', password='lz3v',
host='127.0.0.1',
# 主机,127.0.0.1为本地主机
port=3306, # mysql数据库端口
database='student',
charset='utf8')
# 创建访问游标,充当管理者
cursor = cnx.cursor()
sql_create = '''
create table score(
sno varchar(15) not null,
math float,
english float,
Chinese float,
history float,
primary key(sno)
)engine=InnoDB default charset=utf8;
'''
result = cursor.execute(sql_create)
print(result)
cnx.close()

'''

常见问题

1、使用安装包MSI文件安装mysql后,再对免安装版进行操作容易发生无法启动服务的问题

2、MSI直接安装mysql后有配置过免安装版,容易发生服务冲突:

可能导致直装版出现输入密码后闪退

解决办法,进入到计算机管理找到服务关闭MySQL服务,启动MySQL80(可能不是80,是其他数字)