数据库管理软件相关的概念
数据库管理软件:本质就是个cs架构的套接字程序(解决本地文件存储数据的问题而开发的一个程序)
服务端套接字 客户端套接字
操作系统 操作系统
计算机(本地文件) 计算机硬件
1.程序的所有组件不可能运行在一台计算机上
一台计算机性能有限,我们需要将程序的各个组件分布于多台机器去执行
2.数据安全问题
每台计算机都只能操作本地的文件,这就导致了数据的不一致
将数据与应用程序分离,把文件存放于一台机器,然后多台机器通过网络去访问这台机器上的文件,实现数据的共享(数据安全问题,需要加锁处理问题。。。)
3.并发
远程连接(支持并发)
打开文件
读写(加锁)
关闭文件
常见的数据库管理软件
关系型数据库管理软件(表跟表之间是有关系的)
mysql,oracle
去IOE运动
非关系型数据库管理软件(key:value形式的数据库)
redis,memcache,mongodb(后台数据去用)
redis,memcache通常是用来当作缓存用的,把数据放到内存里面用
mongodb(当作后台数据去用)
非关系型数据库:查询快
关系型数据库:方便管理
sql语句:套接字管理软件的作者为使用者规定的命令规范
数据库重要概念总结
数据-------------------》事物的状态
记录-------------------》文件中的一条信息
表---------------------》一个文件
库---------------------》文件夹
表头-------------------》表格第一行字段
字段-------------------》字段名+字段类型
数据库管理软件-----------》套接字程序:mysqld(server),mysql(client)
数据库服务器-------------》运行mysqld的计算机
数据库???
可能指的是库,也有可能指的是数据库管理软件,或者是数据库服务器
windows系统下载并安装mysql软件
下载安装好后,使用时需要开启两个端口,一个是服务端(mysqld),一个是客户端(mysql)
在cmd里面输入命令”mysqld“会开启服务端,再打开一个cmd端口输入命令”mysql -u(用户名) root -p(密码) -h(ip) -P(端口号,默认端口号3306)“
在前期配置mysql的时候,cmd终端进来以管理员的身份运行
windows+r 输入cmd 进入的是普通用户终端 有一些命令是无法执行的
搜索cmd右键 以管理员身份运行
启动mysql
先切换到mysql所在的目录下,然后输入mysql即可
保留原来的cmd窗口重新打开一个
常见的软件默认端口号
mysql 3306
redis 6379
mongpdb 27017
django 8000
flask 5000
mysql第一次以管理员身份进入是没有密码的
客户端连接服务端完整命令:mysql -h 127.0.0.1 -P 3306 -uroot -p
sql语句初识
1.mysql中的sql语句是以分号作为结束的标志
2.基本命令
show databases;(查看所有的数据库名)
3.连接服务端的命令可以简写
mysql -uroot -p
4.当你输入的命令不对,又不想让服务端执行返回报错信息可以用\c取消
错误命令 \c取消
5.客户端退出 退出命令加不加分号都可以
quit
exit
6.当你在连接服务端的时候发现输入mysql也能连接
但是你不是管理员身份 而只是一个游客模式
环境变量配置及系统服务制作
小知识点补充
1.如何查看当前具体进程2
tasklist
tasklist |findstr mysqld
2.如何杀死具体进程(只有在管理员cmd窗口下才能成功)
taskkill /F /PID PID号
环境变量配置
每次启动mysql需要先切到对应的文件路径下才能操作太过繁琐
将mysqld所在的文件路径添加到系统环境变量中
将mysql服务端制作成系统服务(开机自启动),这样就不需要两个cmd窗口了
查看当前计算机运行的进程数
service.msc
将mysql制作成系统服务
mysqld --install
移除mysql系统服务
mysqld --remove
设置密码
mysqladmin -uroot -p原密码 password 新密码
该命令直接在终端输入即可,无需进入客户端
跳过授权并重置密码(密码破解)
可以将myql获取用户名和密码的校验的功能看成是一个装饰器
装饰在了客户端请求访问的功能上
我们如果将装饰器移除,那么mysql服务端就不会校验用户名和密码了
1.先关闭当前mysql服务端
命令行的方式启动(让mysql跳过用户名密码验证功能)
mysqld --skip-grant-tables跳过授权表启动
2.直接以无密码的方式连接
mysql -uroot -p 直接回车
3.修改当前用户的密码
update mysql.user set password=password(123) where(注意,一定要使用where指定修改的密码,不然会把数据库所有的密码都改成123)
user="root" and host="localhost"
真正存储用户表的密码字段,存储的肯定是密文
只有用户自己知道明文是什么,其他人都不知道,这样更加的安全
密码比对也只能比对密文
4.立刻将修改的数据刷到硬盘
flush privileges
5.关闭当前服务端,然后以正常校验授权的形式启动
统一编码,配置无需密码直接以管理员身份登陆
修改配置文件后一定要重启mysql服务才能生效(重点注意)
mysql默认的配置文件
my-default.ini
ini结尾的一般都是配置文件
程序启动会先加载配置文件中的配置之后才真正启动
[mysqld] # 一旦服务端启动立刻加载下面的配置
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql] # 一旦客户端启动立刻加载下面的配置
。。。
[client] # 其他客户端
。。。
需要你自己新建一个my.ini的配置文件
验证配置是否真的会自动加载
[mysql]
print("hello world")
修改配置文件后一定要重启mysql服务才能生效(重点注意)
统一编码的配置 无需掌握 直接拷贝即可
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
将管理员的用户名和密码也添加到配置文件中后,
之后启动mysql数据库就不需要输入用户名和密码了 直接输入mysql会直接以管理员身份启动
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
user="root"
password=123
default-character-set=utf8
基本sql语句
ps:大部分程序的业务逻辑其实都是增删改查
针对库的增删改查(文件夹)
增:create database db1;(指定编码格式的完整命令为:create database db1 charset="gbk";)
查:show databases; (查所有)
show create database db1; (查单个)
改:alter database db2 charset="utf8"
删:drop database db2;
针对表的增删改查(文件)
在操作表(文件)的时候 需要指定所在的库
查看当前所在的库的名字:select database();
切换库:use db1;
增:create table t1(id int,name char(4));
查:show tables; (查看当前库下的所有表名)
show create table t1;(查当前库下的指定表信息)
describe t1;(将当前表的信息以表格的形式展示,支持简写 desc t1;)
改:alter table t1 modify name char(16);
删:drop table t1;
表的增查改删也可以以绝对路径的形式进行操作,无需切换文件路径
create table db2.t1(id int);(例如在文件db1路径下,新增加一个db2库中的t1的表格)
针对数据的增删改查(一行行数据)
一定要现有库 有表 最后才能操作记录
增:insert into t1 values(1,"nana");
insert into t1 values(1,"nana"),(2,"dada"),(3,"tank")
查:select * from t1; (该命令当数据量特别大的时候不建议使用,*号代表所有的意思)
# select id,name from t1; (将t1中所有用户的id,名字显示出来)
简写 select name from t1; (将t1中所有用户的名字显示出来)
改:update t1 set name="lala" where id = 1;(将id等于1的名字改成lala)
删:delete from t1 where id > 1; (将id大于1的数据全部删除)
delete from t1 where name ="tank"; (将名字为tank的数据删除)
将表所有的数据清空:delete from t1;