MYSQL
Posted 薛才昌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL相关的知识,希望对你有一定的参考价值。
一.认识数据库什什么是mysql?
1.什么是数据库
存储数据的仓库存储数据的?方式
第?一天就学习了了?一种 就是变量量 变量量就是?用来存储数据的变量量存储的介质是什什么呢?就是内存
内存有什什么问题呢?
?无法永久保存
要不不要永久保存呢 ,?比如你刚刚注册成功的?用户名密码
所以我们学习了了?一个新的知识点 ?文件处理理 之前的很?长?一段时间我们都在使?用?文件来进?行行存取数据
把?文件当成数据库
那?用?文件当数据库有没有什什么问题呢?
?首先我们忽略略两个点
第?一点 ?文件存储带来的效率问题
效率有什什么问题 因为?文件处理理是要和硬盘打交道 是?一个io操作第?二点 假设我们的程序所有的组件全都运?行行在同?一台计算机使?用?文件来作为数据库有没有问题? 没问题
但是这都是我们的假设 在正常的?生产环境中我们必须要考虑?文件操作所带来的效率问题
第?二点我们不不可能所有组件运?行行在同?一台计算机上为什什么?
?一台计算机的性能总归有上限 例例如淘宝双11 双12 你?用?一台计算机来做服务器?的 随便便你什什么配置都吃不不消那怎么办?
我们需要对计算机的性能进?行行扩展
如何扩展
- 垂直扩展:不不断的提升硬件性能 不不可取
- 横向扩展 (分布式计算)
添加更更多的计算机 将程序的不不同组件分别运?行行在不不同的计算机上带来的优点:
性能提?高 稳定性提?高(可拔插式)
现在性能问题已经解决了了 通过分布式的?方式
但是这些组件虽然分布在各个计算机上 但是它们还是不不是?一个整体? 是! 也就是说你操作的数据?文件是不不是同?一份? 是的
我们都知道默认情况下 我们的的程序能访问的数据 只有当前计算机
如何能访问别的计算机上的?文件呢? 只有?一种办法,通过?网络 通过?网络把你要什什么数据告诉我 我在通过?网络把你要的数据发送给你,得通过socket
,需要配套的来?一个服务器?端 和 客户端 把客户端程序分发给各个python 程序 python程序通过客户端来链接服务器?端 从?而完成数据的读写
好 现在我们说你可以?自?己写个程序?用来管理理数据?文件 并且你也可以编写
socket服务器?程序来让别的计算机可以访问你的?文件那 你想?一下
- socket需不不需实现并发? 必须要
- 既然是并发 还要考虑线程安全问题? 需要给?文件操作加锁
- 是不不是任何计算机请求链接我都要接受呢? 不不是需要进?行行?用户认证
- 你就考虑?一下 单纯的对本地计算机上的数据进?行行读取 速度慢还是快? 慢 硬盘上的数据有寻道寻址时间 平均延迟时间
- 既然是并发 还要考虑线程安全问题? 需要给?文件操作加锁
速度太慢! 要想办法提?高数据的存取效率 如何提?高 通过索引 后?面会讲
ok 到现在为?止有没有同学说想?自?己写?一个数据库程序呢? 应该没有了了是吧
有的童鞋?心?气?高 说我就不不想要?用现成的 我就要?自?己写 好 ?老老师?支持你然?而早早些年年 没有数据软件的时候 ?大家都是?自?己来完成上述的功能
写?一个软件之前先写?一个socket 服务器? 客户端 解决上?面4个问题 然后才
能开始程序功能的实现
所以就有?人跳出来了了 你们这群傻屌都别写了了 我来写?一个给你们?用这就有了了我们现在看到的这些数据库
1.常?见数据库
mysql 免费开源 ?支持中?大型企业
为了了防?止mysql被闭源 已经 担?心oracle的优化能?力力
创始?人Widenius 另起灶炉 开发了了mariaDB mariaDB 完全兼容
mysql 使?用起来?一模?一样
oracle 收费闭源 更更能强?大 分布式数据库
mysql的?一?生 坎坎坷坷 sun - oracle
SQLServer 微软?生态圈 仅?支持 windows系统 太局限
DB2 IMB 开发的数据库软件 收费闭源 经常与IMB的机器?绑定销售 打折啥的
以上都属于关系型 :
表与表之间的数据存在某种关联关系
?非关系型:
通关key value存储数据各个数据之间没有关系 不不是通?用性数据库 有局
限性
MongoDB redis memcache
总结 我们通常说的数据库就是?一套软件 有服务端和客户端 ?用来操作服务器?端上的
?文件
1.数据库相关概念
数据: ?用于记录事物的状态信息 可以输数字 字符 声?音 图像等等记录?长什什么样呢
name = yyh
记录: ?一条记录?用于保存?一个事物的典型特征 就相当于?文件中的?一?行行
yyh,180,man,帅
表: 本质就是?一个?文件 创建表的时候其实就是在创建?一个?文件 等会
?儿你就看到了了
可不不可能把所有数据全放到同?一个?文件?里里?
为了了降低耦合性 ?方便便管理理 都应该把数据分?门别类 放到不不同?文件
中
库: 就是?一个?文件夹
DBMS: 数据库管理理软件 就是?一个套接字服务器?端软件数据库服务器?:
运?行行有数据库管理理软件的计算机在公司我们开发者关?心的部分是哪些?
从库?网上的需要我们关系 DBMS 和 服务器?是运维关?心的
二.安装mysql
- 下载安装包
下载的时候提供了了带界?面的和不不带界?面的 ?用哪个呢? 你到公司后你想想服务器?是什什么系统?
linux 有界?面吗? 所以我们安装不不带界?面的
- mysql?目录解析bin
mysqld mysql
data
?文件夹 库
my-default.ini
- 启动mysql服务器?cd mysqld
这是?一个socket程序 这时候相当于做了了什什么事?
启动服务器?socket 并监听端?口 默认绑定当前ip 端?口默认3306 接下来做什什么呢?
启动客户端,
运?行行mysql 注意他是?一个socket程序 要连接服务器?需要什什么?
ip 和 端?口
mysql -h ip -P port -uroot -p 密码默认为空
看到欢迎界?面了了是吧 说明socket链接成功了了这个命令提示符本质是什什么?
就是?一个input 对不不对接受?一条指令然后怎么办? 发送个服务器?
服务器?接收到之后呢?
解析指令 取出你要的数据在send给客户端
那问题来了了 指令肯定不不能随便便写,不不认服务器?不不认识,?大家的有套规范就是sql
show databases;对?比data?文件夹
那在讲命令之前呢 你想想 我们每次要使?用mysql都得先cd到这个?目录中
?非常麻烦
怎么解决呢?
- 加到环境变量量命令总结:
启动服务器?
mysqld
启 动 客 户 端 mysql -h -P -u -p 简写 mysql -u -p 关闭服务器?
tasklist | findstr mysqld taskkill /F /PID 8372
- 服务器?的启动和关闭都需要执?行行命令 还是不不够?方便便 怎么办呢? 将mysql注册到系统服务中
终端执?行行 mysqld --install
运?行行->services.msc 查看系统服务
三. 修改管理员密码
Mysqladmin -uroot -p旧密码 password”123”
破解密码:
方式一:删文件
方式二:跳过授权表,进入系统修改授权表
- 停止服务
- 启动服务器并添加参数
- 使用客户端登录服务器,执行修改命令,此时不需要输入密码
Updata mysql.user set password=password(“123”)where user=”root”and host=”localhost”
刷新权限
Fulsh privileges
命令行中重启务器验证新密码
四编码设置
如何设置呢?
在mysql安装?目录下有个my_default.ini 他就是配置?文件,但是他不不是正在使?用的?而是?一个模板?文件,我们如果要?自?己编写配置?文件,需要?自?己复制?一个叫做 my.ini的?文件来编写
编写格式? 你已经学习过了了 configpaser 回顾?一下 conf?文件包含什什么?
分区 和 选项
[section] option = value
要设置客户端的内容就写在mysql分区 要设置服务器?的内容就写在mysqld分区下
原理:mysql在启动的时候会?自动到安装?目录下找my.ini?文件 找到命令对应的标 题加载?里里?面的设置项 在思考?一下 我们在登录的时候是不不是每次都需要输?入?用户信息 麻不不麻烦? 麻烦 那怎么解决? 你看在
mysql -uroot -p123 中 -u -p是不不是参数
是在你执?行行命令是?手动传的参数,那既然是参数可不不可以定义配置?文件中呢? 可以! 来看看如何定义
[mysql] user = "root"
pasword = "123"
下?面我们来测试?一下看?行行不不?行行? ok 报错了了 说明他确实读取了了配置?文件 报错原因 名字写错了了
思考
好现在我问你: 你现在这个配置?文件是给谁?用的 是客户端还是服务端? 即是客户端也是服务器?端 因为我们现在客户端和服务器?端在同?一台电脑上 正常情况下 我们不不会这么?干 你客户端想要?用你就在客户端安装?目录中建?一个 my.ini 只写客户端相关的内容 同样服务器?要?用就在服务器?端建 只写服务器?相关内容
最终结果
[mysqld]
character-set-server = utf-8
collation-server = utf-8_general_ci [mysql]
default-character-set = utf-8
[client]
default-character-set = utf-8
五 mac配置
如果你是musql开发者 ,你觉得配置文件书写方法相同好还是不同好?
相同,降低成本
首先明确配置文件编写方式相同!
不同的在于
- musql的安装路径mac默认无法修改
位于:/user/local
使用command+shift+g来前往
- 配置文件为my,cnf
六 基本sql语句句
1. 库相关
增
create database mydb charset utf8;
查
show databases;
show create databases mydb;
改
alter database mydb charset gbk
删
drop database mydb;
2. 表相关
增
切换?文件夹 (选择数据库)
use mydb;
create table t1 (id int,name char)
查
show tables;
show create table t1; desc t1;
改
改字段
alter table 表名 add | modify | drop | change
add 跟 列列名和类型
modify 跟 列列名 和 类型
drop 跟列列名
change 跟 旧列列名 新列列名 类型改字符编码
alter table 表名 default character set gbk
改名称
rename table tname1 to tname2
删
drop table 表名
3. 记录相关
增
nsert into tablename values(data,....),(data)...
查
select id,name from t1; 列列名可?用*号表示通配符
改
update 表名 set 列列名 = 值 where 条件 ; 可同时修改多个
字段
?用逗号隔开 列列名=值,列列名=值... 没有条件则修改全部
删
delete from 表名 where 条件; 没有条件则删除所有;
truncate table t1; 重建表,清空所有数据;
七 相关规范
字段名 表名 库名
由 数字 字?母 @ $ # _ 组成不不能纯数字
不不能是关键字
八 表的分类(数据存储引擎)
先说什什么是引擎?
汽?车的发动机是不不是引擎? 引擎就是?一个系统的核?心部分
为什什么需要分类呢? 发动机分类呢? 分柴油 汽油 电动
各?自的使?用场景不不同
mysql?支持的引擎show engines
不不同引擎效果测试
以上是关于MYSQL的主要内容,如果未能解决你的问题,请参考以下文章