四十四、MySQL数据库1

2021年9月7日 2点热度 0条评论

 

数据库

存储过程的演变

  • 随意存到一个文件中,数据格式也是千差万别的,完全取决于我们自己
#小李
jason|123|NB

#小红
egon~123~NB

#小王
tank-123-NB

 

  • 软件开发目录,限制了数据的具体存储位置
bin
conf
core
db
lib
interface
readme

  假设上述是一个单机游戏

  那么每个人的游戏记录也只能在自己的计算机上保存

  注册登陆的账号也只能在自己的计算机上有效

  • 如何将单机编程联网
先将数据保存部分统一起来,所有人都来同一个地方操作数据

数据库的本质

  

"""
数据库的本质其实就是一款基于网络通信的应用程序
其实每个人都可以开发一款数据库软件,因为它仅仅就是一个基于网络通信的应用程序

也就意味着数据库软件其实有很多种
         关系型数据库
             MySQL、oracle、db2、access、SQLserver
         非关系型数据库
             redis、mongodb、memcache
"""

# 关系型
        1.数据之间彼此有关系或者有约束
                男生表和前女友表
        2.存储数据的表现格式通常都是表格
               name           password       hobby
              jason             123           read
              egon              123           DBJ
              tank              123           吃生蚝
           每个字段还有存储类型的限制
            比如姓名只能存成字符串形式

# 非关系型
          存储数据一般都是以k/v键值对的形式
                        

MySQL

"""
任何基于网络通信的应用程序底层用的都是socket

-服务端
        -基于socket通信
        -收发消息
        -SQL语句

-客户端
        -基于socket通信
        -收发消息
        -SQL语句
"""

MySQL不单单支持MySQL自己的客户端app,还支持其他编程语言来充当客户端操作
    如何解决语言沟通的障碍
        # 1.让服务端兼容所有的语言(一个人兼通多国语言)
        # 2.采用统一的语言(SQL语句)

重要概念介绍

"""
库                   》》》》》》》》》                  文件夹
表                   》》》》》》》》》                  文件
记录                》》》》》》》》》                  文件内的一行行内容
表头                》》》》》》》》》                  表格内的第一行字段
字段                》》》》》》》》》                  name,age.hobby



name                     age                         hobby
jason                     18                           reak
egon                      32                           DBJ
tank                       50                         swwiming
"""

MySQL的安装

 

"""
在IT界,一般都不会轻易地使用最新版本的软件,因为新版本可能会出现各种
问题(你原本的项目跑的好好地,非要画蛇添足更新版本,然后项目崩溃)
""" MySQL有很多版本,目前使用的是5.7的版本 """ 参考网站: https://www.mysql.com/(官网)--------》DOWNLOADS--------》[MySQL community(GPL)Downloads]----------》
MySQL community server -----------》looking for previous GA versions?------------》
选择 select os verSion:windows(x86-64bit)-----------》
downloads ZIP archive 和zip archive,debug binaries & test suite(两个文件下载好之后,解压即可) 注意:5.7版本解压之后,没有data文件夹,这时候以管理员身份打开cmd命令窗口 切换到MySQL的bin目录下,然后执行:mysql --initialize-insecure --user=mysql 回车,data文件夹安装成功 为了学习方便,我们将服务端和客户端都在本地启动,后期到了公司,服务端会专门跑在一台服务器上,所有人基于网络链接服务端操作即可
"""

 

MySQL服务端与客户端

"""
服务端

    mysqld.exe

客户端
    
    mysql.exe
"""

注意

 

"""
在前期配置MySQL的时候,cmd终端尽量 以管理员身份运行


win + r 输入cmd,进入的是普通用户终端,有一些命令是无法执行的
在开始菜单里输入cmd,鼠标右键选择以管理员身份运行
""" 

 启动

  • 先切换到mysqld所在的bin目录下,然后输入mysqld即可
  • 保留原来的cmd窗口,重新打开一个cmd窗口
"""
服务端启动:
     以管理员身份打开cmd终端,切换到bin目录下,输入mysqld回车即可
     输入: d:  ,切换到d盘
     输入:cd  文件夹名称\   切换到对应的文件夹下面

客户端启动:
    保留原来的服务端cmd窗口,重新打开一个cmd窗口,输入以下命令
    mysql -h 127.0.0.1 -P 3306 -uroot -p
    回车,返回以下内容表示连接成功

 Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.7.35 MySQL Community Server (GPL)

    Copyright (c) 2000, 2021, Oracle and/or its affiliates.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    

MySQL首次以管理员身份进入是没有密码的,直接回车即可
客户端链接服务端完整命令:
    mysql -h 127.0.0.1 -P 3306 -uroot -p

"""
常见软件的默认端口号
    MySQL   3306
    Redis     6379
    mongodb   27017
    Django      8000
    flask         5000
    Tomcat      8080

SQL 语句初识

 

"""
1.MySQL中的SQL语句是以分号作为结束的标志的

2.基本命令
 show databases;       查看所有库名

返回
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    

3.连接服务端的命令可以简写为
   mysql -uroot -p

4.当你输入的命令不对,又不想让服务端执行并返回消息的时候,可以再语句后面用\c取消执行
  错误命令 \c

5.客户端退出命令,退出命令可以不用加分号
      quit
      exit  

6.当你在链接服务端的时候,发现输入mysql也能连接
     但是你不是管理员身份,而只是一个游客模式,只能使用部分功能或者命令

"""

 

环境变量配置及系统服务制作

小知识点补充
"""
1.如何查看当前具体进程
    tasklist
    tasklist |findstr mysqld

2.如何杀死具体进程(只有管理员cmd窗口下才能成功)
    tasklkill /F /PID PID号

"""

环境变量配置

"""
每次启动mysql需要先切换到对应的文件路径下才可以操作,太过繁琐
将mysql所在的文件路径添加到系统环境变量中
"""    

这样设置了之后还是繁琐
将mysql服务制作成系统服务(开机自启动)
"""

查看当前计算机运行的进程
win+r :输入services.msc命令

将mysql制作成系统服务
win+r  输入 cmd,在命令窗口输入:mysqld --install

移除mysql系统服务

win+r  输入 cmd,在命令窗口输入:mysqld --remove

"""

设置密码

"""
在终端输入命令,无需进入客户端
mysqladmin -uroot -p原密码 password 新密码

再次修改密码:
mysqladmin -uroot -p123 password 123456
"""

忘记密码了怎么办?

出去玩了好几个月,回来发现密码忘记了,死活进不去

"""
你可以将mysql获取用户名和密码校验的功能看成是一个装饰器
装饰在了客户端请求访问的功能上

我们如果将该装饰器移除,那么mysql服务端就不会校验用户名和密码了

"""

#1  先关闭当前mysql服务端
    #命令行的方式启动(让mysql跳过用户名和密码的验证功能)
    mysqld --skip-grant-tables

#2 直接以无密码的方式连接
    mysql -uroot -p 回车

#3 修改当前用户的密码
    update mysql.user set authentication_string=password(123456) where user='root' and host='localhost';

"""
真正存储用户表的密码字段,肯定存储的是密文
只有用户自己知道明文是什么,其他人都不知道,这样更加的安全
密码对比也只能对比密文
"""

#4 立刻将密码刷到硬盘
    flush privilege;

#5 关闭当前服务端,然后以正常校验表的形式启动

统一编码

  • mysql默认的配置文件
"""
5.6及之前的版本,有一个默认的配置文件
my_default.ini      #这个文件不可以修改
ini结尾的一般都是配置文件

程序启动会先加载配置文件,然后才真正的启动
   
"""

[mysqld]    #一旦服务端启动会立刻加载下面的配置
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql]        #一旦客户端启动会立刻加载下面的配置
...
[client]    #其他客户端
...

#需要你自己新建一个my.ini的配置文件

#验证配置是否真的是自动加载
[mysql]
print('hello world!')

#修改配置文件后一定要重启服务端才能生效
#统一编码的配置无需掌握,只需拷贝
#偷懒,将管理员的用户名和密码也写进去
[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语句

针对库的增删改查

"""
#增
create database db1;
create database db2 charset='utf8';

#查
show databases;
show create database db1;

#改
alter database db2 charset='gbk';

#删
drop database db2;
"""

针对表的增删改查

"""
在操作表的时候,需要指定所在的库

# 查看当前所在的库名
select database();

# 切换库
use db1;

#增
create table t1(id int,name char(16));

#查
show tables;
show create table t1;
describe t1;
desc t1;

#改
alter table t1 mofify name char(32);

#删
drop table t1;

create table db2.t2(id int) # 也可以采用绝对路径的方式操作不同的库

"""

针对数据的增删改查

"""
一定要先有库,再有表,才可以操作数据

#增
insert into t1 values(1,'jason');
insert into t1 values(1,'jason'),(2,'egon');


#查
select * from t1;
select id,name from t1;

#改
update t1 set name='jasonNB' where id = 1;

#删
delete from t1 where id=1;
delete from t1;
"""