学习至今我们使用数据存储的演变过程:
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键对的形式储存。
任何基于网络通信的应用程序底层用的都是socket:
服务端:
-基于socket通信
-收发消息
-解析SQL语句提供相应的服务
客户端:
-基于socket通信
-收发消息
-使用SQL语句下达命令
MySQL支持自己的客户端APP,也支持其他的编程语言来充当客户端操作。不同的编程语言和客户端APP可以通过发送SQL语句给MySQL服务器,然后从服务器获取结果。
库:》》》文件夹
表:》》》文件
记录:》》文件内的数据
表头:表格的第一行字段。如:列名、数据类型、说明
表单:表头除外的就是表单。如:id、int ....
字段:如:列名、数据类型、说明、id、int ....都是字段
在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第一次以管理员身份进入的时候是没密码的。直接回车就好
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
大部分程序的业务逻辑其实都是增删改查
针对库的增删改查(文件夹)
增:
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)