数据库
数据库的本质是一款基于网络通信的应用程序
数据库大致上分为两种:
- 关系型数据库
- MySQL、oracle、db2、access、sql sever
- 非关系型数据库
- redis、mongodb、memcache
关系型数据库和非关系型数据库的区别:
- 关系型:
- 数据之间有彼此的关系或者约束
- 存储数据的表现形式通常是以表格存储
- 字段名: name pwd age
- 数据 : hz 123 18
- 数据 : lxt 123 18
- 每个字段都可以设定不同的存储类型限制
- 非关系型:
- 储存数据通常是以kv键值对的方式存在
MySQL
基本原理
任何基于网络通信的应用程序底层都是用socket
- 服务端
- 基于socket通信
- 收发消息
- SQL语句
- 客户端
- 基于socket通信
- 收发消息
- SQL语句
MySQL能支持其他编程语言当成客户端来操作,用的是统一的SQL语言
重要概念介绍
- 数据库 = 文件夹
- 表 = 文件
- 数据 = 文件内的一行行数据
- 表头 = 表格内的第一行数据
- 字段 = 第一行数据的元素
安装
4 启动
MySQL要在终端启动,要先启动一个服务端,然后我们在客户端对数据进行操作
-
先切换到mysqld所在的bin目录下,然后输入mysqld即可
-
保留原来的cmd窗口重新打开一个
""" 常见软件的默认端口号 MySQL 3306 redis 6379 mongodb 27017 django 8000 flask 5000 ... MySQL第一次以管理员身份进入是没有密码的 直接回车即可 客户端连接服务端完整命令 mysql -h 127.0.0.1 -P 3306 -uroot -p """
sql基本语句
MySQL的sql语句都是以;最为结束的标志
- 查看所有的库名: show databases
- 连接服务端的命令简写: mysql -uroot -p
- 如果不想让服务端执行自己写的错误命令:c
- 客户端退出:quit 或者 exit
- 如果输入mysql也连接到了服务端,这只是游客模式,不是管理员模式,功能阉割。
环境变量的配置及系统服务制作
小知识点补充
- 如何查看具体进程
- 查看全部进程:tasklist
- 查看具体进程:tasklist | findstr mysqld
- 如何杀死具体进程(必须在管理员cmd窗口下才能成功)
- taskkill/F / PID号
环境变量配置
每次启动mysqld服务端都要在mysql的bin文件目录下才能启动,这样的方式明显很麻烦,我们可以通过把mysqld文件所在路径添加到系统的环境变量中
这样虽然不用到特定目录下启动服务,但是还是要启动两个cmd
最优解是把mysql服务端制作成系统服务(开机自启动)
- 查看当前计算机运行的进程数
- services.msc
- 把mysql制作成系统服务
- mysqld -- install
- 移除mysql系统服务
- mysqld -- remove
关于密码
设置密码指令
mysqladmin -uroot -p原密码 passwprd 新密码
直接终端修改即可,不需要进入客户端
破解密码
- 先关闭mysql服务端
- mysql获取账号密码的效验可以看做是一个装饰器,装饰在客户端访问的功能上
- mysqld --skip-grant-tables
- 直接以无密码的方式连接
- mysql -uroot -p 直接回车
- 修改当前用户的密码
- update mysql .user set password = password(123456)where user='root' and host = 'localhost'
- 立刻修改数据刷新到硬盘
- flush privileges
- 关闭当前服务器,以正常授权形式启动
mysql的密码储存是密文形式,如果忘记了就必须重置
统一编码
mysql在主文件下有一个ini后缀的配置文件
这个配置文件会在程序刚开始运行的时候先加载,再启动
但是一般情况不会再这个自带的ini文件内对mysql配置信息进行修改,通常是自己写一个ini文件让程序运行前加载
my.ini
[mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] user="root" password=123456 default-character-set=utf8
基本sql语句
ps:大部分的程序的业务逻辑都是增删改查
针对库的增删改查(文件夹)
# 增加数据库 create database db2; create database db2 charset = 'gbk'; # 查询数据库 show databases; # 查所有 show create database db2; # 查询指定的数据库 # 修改数据库属性 alter database db2 charset = ‘utf8’; # 删除数据库 drop database db2
针对表的增删改查(文件)
我们要修改表/文件的时候,先要找到这个表/文件所在的数据库/文件夹
# 查看当前所在的库的名字 select database(); # 切换库 use db2; # 增加表 create table t1(id int,name char(4)) # 内涵字段名和字段的数据类型 # 查询表 show tables # 查询当前库所有的表 show create table t1;# 查询当前库指 定名称的表 # 这种语句查出来的结果是select语句的形式 describe t1; # 支持简写 desc t1; # 这种语句的查询结果是以表格的形式 # 修改表 alter table t1 modify name char(16) # 修改表某一字段的数据类型 # 删除表 drop table t1; ''' 可以用绝对路径操作不同库的表进行操作 create table db1.t1(id int); '''
针对数据的增删改查(一行行数据)
# 对数据的操作一定要先有库,有表,最后才能操作 # 增加数据 insert into t2 values(1,'hz'),(2,'egon'); # 查询数据 select * from t2; # 修改数据 update t2 set name=‘hzdsb’ where id= 1; # 删除数据 delete from t2 where id = 1; # 清空表数据 delete from t2;