一、认识数据库
1.什么是mysql?
数据库
永久存储数据的仓库

1.管理不方便 2.文件操作效率问题 3.一个程序不太可能仅运行在同一台电脑上 提高计算机性能的方式 1.垂直扩展 指的是更换性能更好的硬件 2.水平扩展 指的就是添加更多的计算机 把任务分配给每一台 (分布式计算) 分布式计算 的好处 1.其中某一台挂了 不会导致整个系统瘫痪 稳定性高 2.理论上性能可以无限扩展 分布式计算其实也是整体 数据需要被共享 这就需要socket技术 共享就存在竞争问题 加锁处理 文件存取效率问题 数据库 本质上就是一套软件 由服务器端 和 客户端组成 C/S B/S 早些年 没有数据库的时候 程序员要想实现功能 得自己写一套socket 并解决上述问题 于是就有了数据库软件公司
目前常见的数据库
关系型数据库
数据与数据之间可以建立关联关系(用户数据和购买信息)
SQLServer
仅支持windows
MySQL
免费 开源 性能也不差 mysql 先后被sun 和 oracle收购
mariaDB mysql的创始人 担忧mysql的未来 于是推出mariaDB 使用起来完全一致
Oracle
目前最牛逼的数据库 收费很高
DB2
IMB 收费的 一般与计算机绑定销售
非关系型数据库
速度贼快
key value 存取
MongoDB
redis
memcache

数据 用于记录某事物状态的符号 或 别的形式 数字 音频 age = 20 记录 就是一个事物的典型特征的组合 在文件中体现为一行文本 yyh,20,man,180 表 就是一个一个的文件 库 就是一个文件夹 数据库管理系统(DBMS) 就是一个软件用来管理库的 C/S程序 数据库服务器 运行着DBMS的计算机称为数据库服务器
二、安装mysql

1.下载安装包 下载的时候提供了带界⾯的和不带界⾯的 ⽤哪个呢? 你到公司后你想想服务器是什么系统? linux 有界⾯吗? 所以我们安装不带界⾯的 2.mysql⽬录解析 bin mysqld mysql data ⽂件夹 库 my-default.ini 3.启动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到这个⽬录中 ⾮常麻烦 怎么解决呢? 4.加到环境变量 命令总结: 启动服务器 mysqld 启动客户端 mysql -h -P -u -p 简写 mysql -u -p 关闭服务器 tasklist | findstr mysqld taskkill /F /PID 8372 5.服务器的启动和关闭都需要执⾏命令 还是不够⽅便 怎么办呢? 将mysql注册到系统服务中 终端执⾏ mysqld --install 运⾏->services.msc 查看系统服务 三.修改管理员密
三、修改管理员密码

现在密码默认为空 这样安全吗? 不安全 万⼀谁过来把你数据删了 怎么办? 改密码 怎么改: mysqladmin -uroot -p旧密码 password "123' 警告 没关系 破解密码: 万⼀你不⼩⼼把密码忘记了 怎么办?不可能卸载重装吧 所以我们下来讲的是如何破解密码,如何破解呢? 那你就要想 这个密码它肯定要找地⽅存储起来 ,那存客户端还是服务器呢? 服务器 ,那存在内存还是硬盘呢? 必然是硬盘,既然如此,⼀定有⼀⽂件⽤于⼲嘛 ? 存放密码信息 那你有没有什么思路? ⽅式1:删⽂件 没问题 简单粗暴 但是,这个⽂件⾥不只有你的账号信息 还有别⼈账号数据 还 有授权相关的数据 所以你最好不要这么⼲! 那你在思考⼀下,服务器验证⽤户的本质是什么,是不是读取⼀个⽂件的数据来 和你输⼊的数据进⾏对⽐, 那你可不可以这样⼦ 我告诉我服务器说你不要去读那个授权⽂件,可以! ⽅式2: 跳过授权表 进⼊系统修改授权表 跳过这个操作是服务器相关的操作所以 咱的先关掉服务器重新开 在重新开的 时候来告诉它 1.停⽌服务 2.启动服务器并添加参数 mysqld --skip-grant-tables 3.使⽤客户端登录服务器 执⾏修改命令 此时不需要输⼊密码 update mysql.user set password = password("123123") where user="root" and host="localhost" 刷新权限 flush privileges 命令⾏中重启服务器验证新密码
四、编码设置

来看⼀下 当前服务器的设置信息 使⽤客户端执⾏\s 来看⼀下 这边latin1 gbk 什么意思 是不是就是编码? 那这样有没有什么问题? 服务器是拉丁 客户端是 GBK 乱码 如何解决乱码? 保证编码⽅式⼀致! 如何设置呢? 在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 思考? client是什么意思呢? 就是客户端的意思 和mysql有什么区别? mysql也是客户端的其中⼀种 除了它 还有python客户端 java客户端等等 client是所有客户端的总称 如果都有的话 同时设置了两个的话 哪个⽣效呢? 当然是mysql 因为他指名道姓说了mysql这个程序 验证⼀下 将client中加⼀个不存在的⽤户名 user = xxxxxxxxx 看看是否能成功登陆 删除mysql分区 再次验证 注意:修改了mysqld配置需要重启服务器
五、基本sql语句
1.库相关
增
create database mydb charset utf8;
查
show databases;
show creat 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 类型
改名称
rename table tname1 to tname2
删
drop table 表名
3.记录相关
增
insert into tablename values(data,...),(data)
查
select id,name from t1; 列名可用*号表示通配符
改
update 表名 set 列名 =值 where 条件;可同时修稿多个字段
用逗号隔开 列名=值,列名=值....
删
delete from 表名 where 条件;
没有条件则删除所有;
truncate table t1;
重建表,清空所有数据;