一、认识数据库

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
命令⾏中重启服务器验证新密码
View Code

 

 

四、编码设置

  

来看⼀下 当前服务器的设置信息
使⽤客户端执⾏\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配置需要重启服务器
View Code

 

 

五、基本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;

    重建表,清空所有数据;