数据库配置和应用

数据库学习

01数据库安装和配置

01:首先我安装的是mysql5.7.31版本的,原因是,虽然有八点多的版本,但是听说现在那个最新的版本的性能不是很稳定,而且实现的功能是和旧版的差不多的,现在很多的公司还是在使用旧版的

创建了环境变量之后,我可以不用敲绝对路径了,直接使用bin工具目录下面的

mysqld.exe 和 mysql.exe;

在这里插入图片描述

踩过的坑

01:配置文件的设置,主要是生成了一个data的文件夹,并且是在里面进行了初始化生成了很多配置文件,

初始化的设置,执行的命令有两种

一种是可以生成密码的

还有一种是生成空密码的

实际上两种都是可以的

账号都是root这个是超级用户,权限最大的用户

要是空密码的话后面登上去之后再设置也是可以的,问题不大,可是我一以为没有生成密码就是错的,一直在百度浪费了时间,

02

生成Windows服务命令,首先是可执行文件的绝对路径 然后加上 install 自己定义名字

在这里插入图片描述

对了,这些操作都是要在以管理员权限运行的cmd窗口执行,不然执行不了

然后开启服务的话

执行

net start mysql5731

这样服务就开启了

然后连接的指令是

mysql -u 用户名(现在只有root) -p

然后会提示输入密码

正确即可进入

03

操作的后面一定要加上 ; 号

忘记密码

在这里插入图片描述

数据库操作

01:

新建表单

在这里插入图片描述

02:

在这里插入图片描述

数据库增删改查

在这里插入图片描述

在这里插入图片描述

这里的concat函数就是拼接字符串的函数,表示的是 修改的时候在原有name的字符串的基础上面增加“123”,也就是实现了拼接。

where 跟在语句的后面表示附加条件。

python代码操作

在这里插入图片描述

增删改的后面的都要加上代码

conn.commit # 表示执行

第一句代码比之前多了一个参数,“db”表示直接打开userdb那个数据库,方便下面的操作,一般一个项目工程里面只会使用到一个数据库

sql注入了解

通过在Python里面拼接的sql语句,可以通过python的语法 or 实现不规范的输入跳过检查,即使是不存在的用户也可以实现登录操作。

mysql语句的 – 表示注释

在这里插入图片描述

这样一来,返回的结果result就不是 null了

所以为了安全,要控制不规范的输入

在这里插入图片描述

这两行代码都是通过内置的数据类型进行处理操作

无论是列表还是字典,再传参的时候都会做格式化,检查引号,空格什么的非法字符。

02数据库进阶操作
sql进阶查询

在这里插入图片描述

按三个反方向的点出代码框

还可以同时查找两张表,,,,,


通配符
& 表示n个字符   _ 表示一个字符
映射

通过一个sql语句的查询结果去判断是不是执行另一个sql语句

通常是在操作两张表的时候,见得比较多。

排序

查询表的时候把表单按照顺序排好

select * from 表名字 order by 列名 asc;  -- 顺序排序
select * from 表名字 order by 列名 desc;  -- 逆序排序

按照的是列名的大小排序,一般可以是年龄,id数字最为参照

select * from 表名字 order by 列名 asc, 列名 asc;  -- 顺序排序好

如果第一个列名的参数是相等的,就按照第二个列名顺序排序

也可以直接加入限制取值,比如说在排好序之后加上,  limit 5; 就表示只取前面的的5条数据
select * from 表名 limit 2 offset 2; -- 表示从第二条数据开始向后取前两条数据
分组

假设有一个这样的表

在这里插入图片描述

select * from info group by age; -- 表示将年龄相同的人分为一组查询

但是这样的表达是有问题的,年龄相同是可以合并的,但是其他的列不知道要取舍哪一个,所以会报错,一般这样的分组都是只查询相同的分组依据而已;

select age from info group by age; -- 表示将年龄相同的人分为一组查询

一定要加的话可以加上max(id)

select age, max(id) from info group by age; -- 查询到的id是比较大的一个

也可以加上count(id), 他们两个都是聚合条件,聚合条件要放在having后面

select age,count(id) from info group by age having count(id) > 2;   --聚合条件放在后面

类似的聚合条件还有 sum(id) 求和显示, avg(id)求平均数显示

聚合条件的再次筛选,(也就是同一句sql语句里面两次操作count(id)) ,不能是用where 要使用having

现在可以联想到的是,创建好表单导入数据,然后进行分组,求整个集体的和操作或者是进行求平均数的操作
左右连表

在这里插入图片描述

select * from info left outer join depart on info.depart_id = depart.id;

以info为主表,左连接depart表,后面的 是连接的条件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-br9vt6Ar-1647180395242)在这里插入图片描述

select depart.title from info left outer join depart on info.depart_id = depart.id;

这样的操作实现了从一张表访问到另一张表,这里值得想多点


上下连表

要想实现上下联表,就要要求两张表的列数是相同的,查询的结果就会是按照列数两张表分别列出来。

在这里插入图片描述

03实际应用,根据需求设计表
多表问题一对多

在这里插入图片描述

在创建表的时候,就添加外键约束

create table depart(
    id int not null auto_increment primary key,
    title varchar(18) not null
)default charset=utf8;
create table info(
    id int not null auto_increment primary key,
    name varchar(18) not null,
    email varchar(32) not null,
    age int,
    depart_id int not null,
    constraint fk_info_depart foreign key (depart_id) references depart(id)
)default charset=utf8;

如果表已经修改好了,那就直接添加一个约束

alter table info add constraint fk_info_depart foreign key info(depart_id) references depart(id);

删除外键约束

alter table info drop foreign key  fk_info_depart;
多表问题多对多

在这里插入图片描述
在这里插入图片描述

04数据库用户设置管理
用户查询

首先要知道的是,mysql的所有用户都是存在了默认数据库mysql中的默认的user表里,存储的包括账户,权限。

查看,不要select * , 使用

在这里插入图片描述

select user,authentication_string,host from user;

在这里插入图片描述

第二列是密码,第三列是ip地址(控制了只有在这个ip下才能连接到数据库)

用户创建

在自己的电脑上可以登陆,设置的ip是localhost,不能是127.0.0.1
在这里插入图片描述

百分号表示任意字符,使用的时候要用引号括起来,如果引号里面直接是百分号的,就表示匹配任意ip。

用户授权

命令格式:

grant 权限 on 数据库.表 to '用户'@'ip地址'

在这里插入图片描述

查看授权:

在这里插入图片描述

05mysql天花板操作
sql文件导入执行

写入sql文件,或者是拿到别人的sql文件,具有很多相同的操作,不想一个个执行,可以直接在终端导入sql文件,自动执行。

导入数据库命令:

mysql -u root -p 数据库 < /users/.../../...sql  -- 文件的路径

把自己的数据库复制一份给别人,可以直接导出操作:

# 导出表结构,数据
mysqldump -u root -p 数据库 > /users/.../../...sql  -- 要导出的路径

# 导出表结构,表里没有数据
mysqldump -u root -p -d 数据库 < /users/.../../...sql  -- 要导出的地方
mysql导入csv文件

step1.首先,检查一个全局系统变量 ‘local_infile’ 的状态:

show global variables like ‘local_infile’;

如果得到如下显示 Value=OFF,则说明这是不可用的。如果得到的是 Value=ON,请直接跳往 step3

img

step2.要把这个值变为 ON,这里找到两种方法:

​ 第一种方法:

​ 1).在mysql客户端输入:

set global local_infile=1;

2).然后退出quit 退出mysql。再次进入时,便会出现 Value=ON

step3.在进入数据库的命令行要加上 –local_infile=1 这个配置,具体如下:

mysql --local_infile=1 -u <username> -p

导入文件代码

在windows的命令窗口路径中的  ’\‘会被吞掉,要再加 \ 实现转义。
 load data local infile '要导入的文件路径' into table 要导入的表  character set gbk fields terminated by ','  optionally enclosed by '"' escaped by '"'   lines terminated by '\r\n';

设置完成之后还是每一次都要弄一下才能导进去,不懂为啥,,

然后就是新建的表要对应导入的csv文件,

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值