数据库学习:Day44的深度探索

发表时间: 2023-09-16 02:13

引子

学习至今我们使用数据存储的演变过程:

1、使用<wish open()as f:> 保存数据。

将数据随意存储的到一个文件中,数据的存放格式也是取决于个人,并无统一标准。

2、使用了软件开发目录规范限制了存储数据的具体位置。

	bin	#启动文件	conf	#配置文件	lib	#公共方法	core	#业务逻辑	db	#存储数据	log	#日志	readme	#说明

使用这种方式,每个人的数据记录只会在自己的计算机上面保存,相当于是一个单机游戏。不能联机不能数据互通。

如果想要多台计算机上面的数据互通的话,则需要将每台计算机上面的数据部分抽取出来,用一个服务器保存,如果有谁想操作这部分数据的话,可以通过socket访问服务端,向其发请求访问。那个服务器就是数据库的服务端。然后数据库服务端也会有同步备份,会创建服务器集群,以保证数据的安全性。

数据库的本质

数据库的本质其实就是一款基于网络通信的,用于处理数据的应用程序,所以每个人都可以开发一款数据库软件。也就意味着数据库软件其实有很多,如:MySQL、SQL Server、Oracle、DB2、Sybase、Access... ...

通常可以分为关系型数据库和非关系型数据库:

关系型:

1、数据之间彼此有关系或者约束。

2、存储数据的表现形式通常是以表格存储。

· 每个字段还会有存储类型的限制

比如名字只能存字符串,年龄只能存数字

关系型数据库

非关系型:

存储数据通常都是以K,V键对的形式储存。

MySQL

任何基于网络通信的应用程序底层用的都是socket:

服务端:

-基于socket通信

-收发消息

-解析SQL语句提供相应的服务

客户端:

-基于socket通信

-收发消息

-使用SQL语句下达命令

MySQL支持自己的客户端APP,也支持其他的编程语言来充当客户端操作。不同的编程语言和客户端APP可以通过发送SQL语句给MySQL服务器,然后从服务器获取结果。

重要概念介绍:

库:》》》文件夹

表:》》》文件

记录:》》文件内的数据

表头:表格的第一行字段。如:列名、数据类型、说明

表单:表头除外的就是表单。如:id、int ....

字段:如:列名、数据类型、说明、id、int ....都是字段

MySQL安装:

在IT界,一般都不会轻易安装最新版本的软件,因为容易出现各种问题。

用的一般是5.5~5.6左右(2020年)其他版本问题也不大,因为sql语句是一样的。

为了方便学习我们将服务端和客户端都在本地启动,后期到了公司,服务端会专门跑在一台服务器上,所有人基于网络连接服务端操作。

mysql客户端与服务端的名字:

服务端:mysqld.exe

客户端:mysql.exe

具体安装步骤:

在前期配置mysql的时候,终端尽量以管理员的身份运行。

搜索cmd,右键以管理员身份运行

D:

cd 下载\MySQL-5.6.48-winx64\mysql-5.6.48-winx64\bin

mysqld

服务端已启动。

--------------------

启动客户端:

启动cmd

D:

cd 下载\MySQL-5.6.48-winx64\mysql-5.6.48-winx64\bin

客户端连接服务器的完整命令:mysql -h 127.0.0.1 -P 3306 -uroot -p

可以简写:mysql -uroot -p

直接输入mysql也能连接,但不是管理员身份

#常见软件的默认端口号

MysQL 3306

redis 6379

mongodb 27017

django 8000

flask 5000

tomcat 8080


mysql第一次以管理员身份进入的时候是没密码的。直接回车就好

SQL语句初识:

1、sql语句是以;结尾的。

2、基本命令:

show databases; # 查看所有的库名

当你输的命令不对,又不想让客户端执行,可以用\c取消。

quit exit #退出命令,加不加;都能执行

环境变量配置及系统服务制作

tasklist # 列出当前系统中所有的进程列表

tasklist |findstr mysqld # 将进程列表传递给findstr命令,并筛选出包含字符串"mysqld"的进程。findstr是用于在文本中搜索字符串的命令。


taskkill /F /PID PID号 # 杀死进程(只有在管理员cmd下才能成功)


可以将mysql添加进环境变量里,也可以设置为自启动。

win+R 输入services.msc #查看当前计算机的运行进程数

将mysql制作成系统服务:mysqld --install

移除mysql系统服务:mysqld --remove

mysqladmin -uroot -p原密码 password 新密码 #设置密码 237


忘记密码的操作

可以将mysql获取用户名和密码校验的功能看成是一个装饰器,装饰在了客户端的请求访问的功能上。

如果我们将该装饰器移除 那么mysql服务端就不会校验用户名和密码了。

# 1 关闭当前服务端

命令行的方式启动(让mysql跳过用户名密码验证功能)

mysqld --skip-grant-tables


#2 直接以无密码的方式连接

mysql -uroot -p 回车


#3 修改当前用户的密码

update mysql.user set password=password(237230);#将所有用户的都修改

#会自动把明文加密成密文

update mysql.user set password=password(237230) where user= 'root' and host='localhost'; #将用户名是root host是localhost的密码修改


#4 立刻将修改数据刷到硬盘

flush privileges;


#5 关闭当前服务端 然后以正常校验授权表的形式启动

统一编码

mysql默认的配置文件:my-default.ini

ini结尾的一般都是配置文件

程序启动会先加载配置文件中你的配置后才能真正启动

[mysqld] #一旦服务端启动就会立刻加载下面的配置

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES


[mysql] # 一旦客户端启动就会立刻加载下面的配置

...

[client] # 其他客户端

...


#可以自己创建一个my.ini的配置文件

#修改配置文件后一定要重启服务

#统一编码的配置 无需掌握 直接拷贝进my.ini:


[mysqld]

character-set-server=utf8

collation-server=utf8_general_ci

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

基本的SQL语句

大部分程序的业务逻辑其实都是增删改查

针对库的增删改查(文件夹)

增:

create database db1;

create database db1 charset='utf8'; #可以指定编码

查:

show databases; #查所有

show create database db1; #查单个

改:

alter database db1 charset='gbk';

删:

drop database db1;

---------------------------------------------------------------------------------------------------------

针对表的增删改查(文件)

#操作表的时候需要指定所在的文件夹(库)

#查看当前所在的库的名字:select database();

#切换库:use db1

增:

create table t1(id int,name char(4)); #也可以用绝对路径的形式操作create table db1.t1(id int,name char(4));

删:

drop table t1;

改:

alter table t1 modify name char(16);

查:

show tables; #查看当前目录下面所有表名

show create table t1 #查看单个

describe t1 #描述,简写:desc t1

---------------------------------------------------------------------------------------------------------

针对数据的增删改查(数据)

增:

insert 或者into t1 values(1,"wff");

insert t1 values(1,"wff"),(2,"wjm");

删:

delete from t1 where id > 1;

delete from t1 where name='wff';

delete from t1; #清空

改:

update t1 set name ='wff pro' where id > 1; #将t1里面的所有name改为wff pro 只改id>1的。

查:

select * from t1 #查看所有数据

select id,name from t1 #查看指定数据(id,name)